Пример #1
0
        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;
            }));
        }
Пример #2
0
        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());
            }));
        }
Пример #3
0
        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);
            }));
        }