Esempio n. 1
0
        public void SimpleILTest()
        {
            var records = new[]
            {
                new []
                {
                    new KeyValuePair <string, object>("Id", 1),
                    new KeyValuePair <string, object>("Name", "Rafa"),
                    new KeyValuePair <string, object>("Age", 25),
                },
                new []
                {
                    new KeyValuePair <string, object>("Id", 2),
                    new KeyValuePair <string, object>("Name", "Ale"),
                    new KeyValuePair <string, object>("Age", null),
                },
            };
            var reader  = new DicDataReader(records);
            var t       = typeof(Customer1);
            var rt      = typeof(DicDataReader);
            var mapping = new CtorMapping(
                t.GetConstructor(new Type[0]),
                new ValueMapping[0],
                new Dictionary <PropertyInfo, ValueMapping>
            {
                { t.GetProperty("Id"), new SingularMapping(typeof(int), 0) },
                { t.GetProperty("Name"), new SingularMapping(typeof(string), 1) },
                { t.GetProperty("Age"), new SingularMapping(typeof(int?), 2) }
            }
                );

            var method = Sql2Sql.Mapper.ILCtors.ILCtorLogic.GenerateReaderMethod <DicDataReader, Customer1>(mapping);
            var comp   = method.Compile();

            var call = comp(reader);
        }
Esempio n. 2
0
        private static object InternalCreate2(Type type)
        {
            if (!type.IsEnum)
            {
                var typeCode = Type.GetTypeCode(type);
                switch (typeCode)
                {
                case TypeCode.Boolean: return(false);

                case TypeCode.Byte: return(default(byte));

                case TypeCode.Char: return(default(char));

                case TypeCode.DateTime: return(default(DateTime));

                case TypeCode.Decimal: return(default(Decimal));

                case TypeCode.Double: return(default(double));

                case TypeCode.Int16: return(default(Int16));

                case TypeCode.Int32: return(default(Int32));

                case TypeCode.Int64: return(default(Int64));

                case TypeCode.SByte: return(default(SByte));

                case TypeCode.Single: return(default(Single));

                case TypeCode.String: return(default(string));

                case TypeCode.UInt16: return(default(UInt16));

                case TypeCode.UInt32: return(default(UInt32));

                case TypeCode.UInt64: return(default(UInt64));
                }
            }

            object[]    args = null;
            CtorMapping mapping;

            if (!ctorCache.TryGetValue(type, out mapping))
            {
                var ctor = type.GetConstructor(Type.EmptyTypes);
                if (ctor != null)
                {
                    mapping = new CtorMapping {
                        Constructor = ctor, Handler = ctor.GetCreator()
                    };
                    lock (Mutex)
                        ctorCache[type] = mapping;
                }
            }

            if (mapping != null)
            {
                return(mapping.Handler(args));
            }

            return(InternalCreate_Method.MakeGenericMethod(type).Invoke(null, null));
        }