public abstract Compile ( System.Linq.Expressions.ParameterExpression stateParameterExpression, |
||
stateParameterExpression | System.Linq.Expressions.ParameterExpression | |
returnTarget | ||
Результат |
public override Expression Compile(ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression) { var value = this.Target.Compile(stateParameterExpression, returnTarget); var convertedValue = Expression.Convert(value, typeof(LogicStructureInstance)); var valueVariable = Expression.Variable(typeof(LogicStructureInstance), "value"); var field = Expression.Variable(typeof(LogicField), "field"); Expression<Func<LogicStructureInstance, string, LogicField>> lookupField = (x, z) => x.Fields.Keys.First(y => y.Name == z); var assignValue = Expression.Assign(valueVariable, convertedValue); var assignFieldName = Expression.Assign( field, Expression.Invoke(lookupField, valueVariable, Expression.Constant(this.Field))); var assignField = Expression.Assign( Expression.Property(Expression.Property(valueVariable, "Fields"), "Item", field), Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object))); var assignFieldSet = Expression.Assign( Expression.Property(Expression.Property(valueVariable, "FieldsSet"), "Item", field), Expression.Constant(true)); return Expression.Block( new[] { valueVariable, field }, assignValue, assignFieldName, assignField, assignFieldSet); }
public override Expression Compile(ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression) { var value = this.Target.Compile(stateParameterExpression, returnTarget); var convertedValue = Expression.Convert(value, typeof(LogicStructureInstance)); var valueVariable = Expression.Variable(typeof(LogicStructureInstance), "value"); var field = Expression.Variable(typeof(LogicField), "field"); Expression <Func <LogicStructureInstance, string, LogicField> > lookupField = (x, z) => x.Fields.Keys.First(y => y.Name == z); var assignValue = Expression.Assign(valueVariable, convertedValue); var assignFieldName = Expression.Assign( field, Expression.Invoke(lookupField, valueVariable, Expression.Constant(this.Field))); var assignField = Expression.Assign( Expression.Property(Expression.Property(valueVariable, "Fields"), "Item", field), Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object))); var assignFieldSet = Expression.Assign( Expression.Property(Expression.Property(valueVariable, "FieldsSet"), "Item", field), Expression.Constant(true)); return(Expression.Block( new[] { valueVariable, field }, assignValue, assignFieldName, assignField, assignFieldSet)); }
public override Expression Compile( ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression) { return Expression.Assign( Expression.Property( Expression.Property(stateParameterExpression, "Variables"), "Item", Expression.Constant(this.Identifier)), Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object))); }
public override Expression Compile( ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression) { return (Expression.Assign( Expression.Property( Expression.Property(stateParameterExpression, "Variables"), "Item", Expression.Constant(this.Identifier)), Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object)))); }