public static ReflectionInfo <TObject> GetInfo <TObject>() { var type = typeof(TObject); object info; if (ReflectionInfoCache.TryGetValue(type, out info)) { return((ReflectionInfo <TObject>)info); } else { var refInfo = new ReflectionInfo <TObject>(type); ReflectionInfoCache[type] = refInfo; return(refInfo); } }
/// <summary> /// 用Reader填充T类型列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="reader"></param> /// <returns></returns> public static List <T> ReaderToObjectList <T>(DbDataReader reader) { if (!reader.HasRows) { return(new List <T>()); } var refInfo = ReflectionHelper.GetInfo <T>(); List <T> list = new List <T>(); var first = true; int length = reader.FieldCount; ReflectionInfo <T> .Accessor[] accessorArray = new ReflectionInfo <T> .Accessor[length]; object[] values = new object[length]; while (reader.Read()) { reader.GetValues(values); T obj = refInfo.NewInstance();// Activator.CreateInstance<T>(); if (first) { for (int i = 0; i < length; i++) { var fieldName = reader.GetName(i); var accessor = refInfo.GetAccessor(fieldName); accessorArray[i] = accessor; accessor.Set(obj, values[i]); } first = false; } else { for (var i = 0; i < length; i++) { accessorArray[i].Set(obj, values[i]); } } list.Add(obj); } return(list); }