public ImmutableHashSet <object> VisitZenCreateObjectExpr <TObject>(ZenCreateObjectExpr <TObject> expression, Unit parameter) { return(LookupOrCompute(expression, () => { var set = ImmutableHashSet <object> .Empty; foreach (var value in expression.Fields.Values) { var valueType = value.GetType(); var acceptMethod = valueType .GetMethod("Accept", BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(typeof(Unit), typeof(ImmutableHashSet <object>)); var valueResult = (ImmutableHashSet <object>)acceptMethod.Invoke(value, new object[] { this, parameter }); set = set.Union(valueResult); } return set; })); }
public Expression VisitZenCreateObjectExpr <TObject>(ZenCreateObjectExpr <TObject> expression, ExpressionConverterEnvironment parameter) { return(LookupOrCompute(expression, () => { var fieldNames = new List <string>(); var parameters = new List <Expression>(); foreach (var fieldValuePair in expression.Fields) { var field = fieldValuePair.Key; var value = fieldValuePair.Value; var valueType = value.GetType(); var acceptMethod = valueType .GetMethod("Accept", BindingFlags.NonPublic | BindingFlags.Instance) .MakeGenericMethod(typeof(ExpressionConverterEnvironment), typeof(Expression)); var valueResult = (Expression)acceptMethod.Invoke(value, new object[] { this, parameter }); fieldNames.Add(field); parameters.Add(valueResult); } return CreateObject <TObject>(parameters.ToArray(), fieldNames.ToArray()); })); }
public SymbolicValue <TModel, TVar, TBool, TInt, TString> VisitZenCreateObjectExpr <TObject>(ZenCreateObjectExpr <TObject> expression, SymbolicEvaluationEnvironment <TModel, TVar, TBool, TInt, TString> parameter) { return(LookupOrCompute(expression, () => { var fields = ImmutableDictionary <string, SymbolicValue <TModel, TVar, TBool, TInt, TString> > .Empty; foreach (var fieldValuePair in expression.Fields) { var field = fieldValuePair.Key; dynamic fieldValue = fieldValuePair.Value; fields = fields.Add(field, fieldValue.Accept(this, parameter)); } return new SymbolicClass <TModel, TVar, TBool, TInt, TString>(this.Solver, fields); })); }