Ejemplo n.º 1
0
        private Lambda ParseAsLambda(string expressionText, Type expressionType, Parameter[] parameters, IConverter integerConverter = null, IConverter realConverter = null)
        {
            var arguments = new ParserArguments(
                expressionText,
                _settings,
                expressionType,
                parameters,
                integerConverter,
                realConverter);

            var expression = Parser.Parse(arguments);

            foreach (var visitor in Visitors)
            {
                expression = visitor.Visit(expression);
            }

            var lambda = new Lambda(expression, arguments);

#if TEST_DetectIdentifiers
            AssertDetectIdentifiers(lambda);
#endif

            return(lambda);
        }
Ejemplo n.º 2
0
        internal Lambda(Expression expression, ParserArguments parserArguments)
        {
            _expression      = expression ?? throw new ArgumentNullException(nameof(expression));
            _parserArguments = parserArguments ?? throw new ArgumentNullException(nameof(parserArguments));

            // Note: I always lazy compile the generic lambda. Maybe in the future this can be a setting because if I generate a typed delegate this compilation is not required.
            _delegate = new Lazy <Delegate>(() =>
                                            Expression.Lambda(_expression, _parserArguments.UsedParameters.Select(p => p.Expression).ToArray()).Compile());
        }
Ejemplo n.º 3
0
        private Lambda ParseAsLambda(string expressionText, Type expressionType, Parameter[] parameters)
        {
            var arguments = new ParserArguments(expressionText, _settings, expressionType, parameters);

            var expression = Parser.Parse(arguments);

            foreach (var visitor in Visitors)
            {
                expression = visitor.Visit(expression);
            }

            return(new Lambda(expression, arguments));
        }
Ejemplo n.º 4
0
        internal Lambda(Expression expression, ParserArguments parserArguments)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }
            if (parserArguments == null)
            {
                throw new ArgumentNullException("parserArguments");
            }

            _expression      = expression;
            _parserArguments = parserArguments;

            // Note: I always compile the generic lambda. Maybe in the future this can be a setting because if I generate a typed delegate this compilation is not required.
            _lambdaExpression = Expression.Lambda(_expression, Parameters.Select(p => p.Expression).ToArray());
            _delegate         = _lambdaExpression.Compile();
        }
Ejemplo n.º 5
0
        Lambda CreateLambda(string expressionText, Type expressionType, Parameter[] parameters)
        {
            var arguments = new ParserArguments(expressionText, _settings)
            {
                ExpressionReturnType = expressionType
            };

            arguments.AddParameters(parameters);

            var expression = Parser.Parse(arguments);

            var lambda = new Lambda(expression, arguments);

#if TEST_DetectIdentifiers
            AssertDetectIdentifiers(lambda);
#endif

            return(lambda);
        }