示例#1
0
        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);
            }
        }
示例#2
0
        /// <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);
        }