Exemplo n.º 1
0
        private Action <TCase> GenerateSetter(AttributeSchema attributeSchema, AttributeDefinition attributeDefinition)
        {
            Func <Delegate, Action <TCase> > factory = SetterFactory <int>;

            var setter = DynamicCodeUtils.GenerateSetter <TCase>(attributeDefinition);

            return(DynamicCodeUtils.DelegateInvoke(factory, attributeDefinition.Type, setter, this));

            Action <TCase> SetterFactory <T>(Delegate generatedSetter)
            {
                if (!(generatedSetter is Setter <TCase, T> setterDelegate))
                {
                    throw new InvalidOperationException("Encountered incorrect setter type.");
                }

                var getter = cursor.GetAttributeGetter <T>(attributeSchema);

                return(target =>
                {
                    T value = default;
                    getter(ref value);
                    setterDelegate(target, value);
                });
            }
        }
Exemplo n.º 2
0
        private Action <TCase> GenerateIdSetter()
        {
            var setter = DynamicCodeUtils.GenerateSetter <TCase>(definition.IdAttribute);

            if (!(setter is Setter <TCase, string> setterDelegate))
            {
                throw new InvalidOperationException("Encountered incorrect ID setter type.");
            }

            return(target =>
            {
                var value = cursor.GetId();
                setterDelegate(target, value);
            });
        }
Exemplo n.º 3
0
        private Action <TCase> GenerateSolutionSetter()
        {
            Func <Delegate, Action <TCase> > factory = SetterFactory <int>;
            var setter = DynamicCodeUtils.GenerateSetter <TCase>(definition.SolutionAttribute);

            return(DynamicCodeUtils.DelegateInvoke(factory, definition.SolutionAttribute.Type, setter, this));

            Action <TCase> SetterFactory <T>(Delegate generatedSetter)
            {
                if (!(generatedSetter is Setter <TCase, T> setterDelegate))
                {
                    throw new InvalidOperationException("Encountered incorrect solution setter type.");
                }

                return(target =>
                {
                    var value = cursor.GetSolution <T>();
                    setterDelegate(target, value);
                });
            }
        }