/// <summary> /// Parses a specified logical expression into expression tree within given context. /// </summary> /// <typeparam name="TContext">The type identifier of the context within which the expression is interpreted.</typeparam> /// <param name="expression">The logical expression.</param> /// <returns> /// A delegate containing the compiled version of the lambda expression described by created expression tree. /// </returns> /// <exception cref="System.ArgumentNullException">expression;Expression not provided.</exception> /// <exception cref="ParseErrorException"></exception> public Func <TContext, bool> Parse <TContext>(string expression) { if (expression == null) { throw new ArgumentNullException(nameof(expression), "Expression not provided."); } lock (_locker) { try { Clear(); ContextType = typeof(TContext); var param = Expression.Parameter(typeof(TContext)); ContextExpression = param; Expr = expression; Wall = new TypeWall(expression); var expressionTree = ParseExpression(); var lambda = Expression.Lambda <Func <TContext, bool> >(expressionTree, param); return(lambda.Compile()); } catch (ParseErrorException) { throw; } catch (Exception e) { throw new ParseErrorException("Parse fatal error.", e); } } }
public Expr(string expression) { ExprString = expression; Wall = new TypeWall(expression); }