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); }
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)); }