コード例 #1
0
        private static ICompiledExpression Compile(string expression)
        {
            // Простейшая логика кэширования результата компиляции выражений
            // Возможно, в дальнейшем потребуется усовершенствовать этот код

            ICompiledExpression compiledExpression = null;

            if (!string.IsNullOrWhiteSpace(expression))
            {
                expression = expression.Trim();

                if (!Expressions.TryGetValue(expression, out compiledExpression))
                {
                    lock (Expressions)
                    {
                        if (!Expressions.TryGetValue(expression, out compiledExpression))
                        {
                            try
                            {
                                compiledExpression = ExpressionCompiler.Compile(expression);
                            }
                            catch
                            {
                                // Пока просто игнорируем ошибки компиляции
                                compiledExpression = null;
                            }

                            Expressions.Add(expression, compiledExpression);
                        }
                    }
                }
            }

            return(compiledExpression);
        }
コード例 #2
0
 public ConditionalExpression(ICompiledExpression condition, ICompiledExpression whenTrue,
                              ICompiledExpression whenFalse)
 {
     _condition = condition;
     _whenTrue  = whenTrue;
     _whenFalse = whenFalse;
 }
コード例 #3
0
 public LambdaExpression(IDictionary <string, Type> parameters, ICompiledExpression body)
 {
     _parameters = (parameters != null)
         ? parameters.Select(p => CreateParameter(p.Key, p.Value)).ToArray()
         : EmptyParameters;
     _body = body;
 }
コード例 #4
0
 public InvocationExpression(string methodName, Type[] genericArguments, ICompiledExpression invokeTarget,
                             IEnumerable <ICompiledExpression> invokeArguments)
 {
     _methodName       = methodName;
     _genericArguments = genericArguments;
     _invokeTarget     = invokeTarget;
     _invokeArguments  = invokeArguments;
 }
コード例 #5
0
 public UnaryMinusExpression(ICompiledExpression operand)
     : base(operand)
 {
 }
コード例 #6
0
 public GreaterThanOrEqualExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #7
0
 public MemberAccessExpression(ICompiledExpression expression, string memberName)
 {
     _expression = expression;
     _memberName = memberName;
 }
コード例 #8
0
 public ModuloExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #9
0
 public EqualsExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #10
0
 public SwitchExpression(ICompiledExpression expression,
                         IDictionary <ICompiledExpression, ICompiledExpression> sections)
 {
     _expression = expression;
     _sections   = sections;
 }
コード例 #11
0
 public ElementAccessExpression(ICompiledExpression expression, IEnumerable <ICompiledExpression> indexes)
 {
     _expression = expression;
     _indexes    = indexes;
 }
コード例 #12
0
 protected UnaryExpression(ICompiledExpression operand)
 {
     Operand = operand;
 }
コード例 #13
0
 public LogicalOrExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #14
0
 public SubtractExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #15
0
 public LogicalNotExpression(ICompiledExpression operand)
     : base(operand)
 {
 }
コード例 #16
0
 public RightShiftExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #17
0
 public CoalesceExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #18
0
 protected BinaryExpression(ICompiledExpression left, ICompiledExpression right)
 {
     Left  = left;
     Right = right;
 }
コード例 #19
0
 public MultiplyExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #20
0
 public LessThanExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #21
0
 public BitwiseOrExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #22
0
 public ExclusiveOrExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }
コード例 #23
0
 public CastExpression(Type type, ICompiledExpression expression)
 {
     _type       = type;
     _expression = expression;
 }
コード例 #24
0
 public DivideExpression(ICompiledExpression left, ICompiledExpression right)
     : base(left, right)
 {
 }