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); }
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()); }
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)); }
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(); }
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); }