Exemplo n.º 1
0
        public static bool TryBind(SyntaxTreeNode node, BindingContext bindingContext, TypeDescription expectedType, out Expression boundExpression, out Exception bindingError)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }
            if (bindingContext == null)
            {
                throw new ArgumentNullException("bindingContext");
            }
            if (expectedType == null)
            {
                throw new ArgumentNullException("expectedType");
            }

            boundExpression = null;
            bindingError    = null;

            var newNode       = node.GetNewExpression(throwOnError: true);
            var newExpression = default(Expression);

            if (AnyBinder.TryBind(newNode, bindingContext, TypeDescription.ObjectType, out newExpression, out bindingError) == false ||
                newExpression is NewExpression == false)
            {
                if (bindingError == null)
                {
                    bindingError = new ExpressionParserException(Properties.Resources.EXCEPTION_BIND_FAILEDTOBINDNEWEXPRESSION, node);
                }
                return(false);
            }

            var initializers = default(ElementInit[]);

            if (TryGetListInitializers(node, bindingContext, out initializers, out bindingError) == false)
            {
                if (bindingError == null)
                {
                    bindingError = new ExpressionParserException(Properties.Resources.EXCEPTION_BIND_FAILEDTOBINDLISTINITIALIZERS, node);
                }
                return(false);
            }

            boundExpression = Expression.ListInit((NewExpression)newExpression, initializers);
            return(true);
        }