コード例 #1
0
        /// <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);
                }
            }
        }
コード例 #2
0
 public Expr(string expression)
 {
     ExprString = expression;
     Wall       = new TypeWall(expression);
 }