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); }
public ConditionalExpression(ICompiledExpression condition, ICompiledExpression whenTrue, ICompiledExpression whenFalse) { _condition = condition; _whenTrue = whenTrue; _whenFalse = whenFalse; }
public LambdaExpression(IDictionary <string, Type> parameters, ICompiledExpression body) { _parameters = (parameters != null) ? parameters.Select(p => CreateParameter(p.Key, p.Value)).ToArray() : EmptyParameters; _body = body; }
public InvocationExpression(string methodName, Type[] genericArguments, ICompiledExpression invokeTarget, IEnumerable <ICompiledExpression> invokeArguments) { _methodName = methodName; _genericArguments = genericArguments; _invokeTarget = invokeTarget; _invokeArguments = invokeArguments; }
public UnaryMinusExpression(ICompiledExpression operand) : base(operand) { }
public GreaterThanOrEqualExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public MemberAccessExpression(ICompiledExpression expression, string memberName) { _expression = expression; _memberName = memberName; }
public ModuloExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public EqualsExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public SwitchExpression(ICompiledExpression expression, IDictionary <ICompiledExpression, ICompiledExpression> sections) { _expression = expression; _sections = sections; }
public ElementAccessExpression(ICompiledExpression expression, IEnumerable <ICompiledExpression> indexes) { _expression = expression; _indexes = indexes; }
protected UnaryExpression(ICompiledExpression operand) { Operand = operand; }
public LogicalOrExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public SubtractExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public LogicalNotExpression(ICompiledExpression operand) : base(operand) { }
public RightShiftExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public CoalesceExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
protected BinaryExpression(ICompiledExpression left, ICompiledExpression right) { Left = left; Right = right; }
public MultiplyExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public LessThanExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public BitwiseOrExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public ExclusiveOrExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }
public CastExpression(Type type, ICompiledExpression expression) { _type = type; _expression = expression; }
public DivideExpression(ICompiledExpression left, ICompiledExpression right) : base(left, right) { }