基于泛型 反射 获取任何类的的公共属性及类的集合并转存到内存表Datatable中

       /// <summary>
        /// 由一个List<T>得到一个DataTable,方法名ToDataTable<T>这是一个泛型方法 T是泛型参数 给什么类(型)参数,就是什么类 typeof(..)是反射知识的一部分
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="items"></param>
        /// <returns></returns>
        public static DataTable ToDataTable<T>(List<T> items)
        {
            DataTable dataTable = new DataTable(typeof(T).Name);//实例化一个名为Computer的Datatable

            // 获取所有公共属性 typeof(T)获取T类型的对象或转成Type类型的一个对象 T泛型类型参数,代表任何类型 GetProperties,是Type类的一个方法,用于获取类型下所有属性(公有,私有,受保护,内部,不包括静态属性)
            //BindingFlags是枚举,控制反射绑定成员的方式标记,意为只返回T的公共成员和实例(非静态)成员 |按位或,解释为T的公共实例属性
            PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
            //Datatable表头
            foreach (PropertyInfo prop in props)
            {
                // 创建一个DataColumn,绑定到props的属性
                dataTable.Columns.Add(prop.Name, prop.PropertyType);
            }
            //Datatable表体
            foreach (T item in items)
            {
                var values = new object[props.Length];
                for (int i = 0; i < props.Length; i++)
                {
                    values[i] = props[i].GetValue(item, null);
                }
                dataTable.Rows.Add(values);//创建Datatable的row,需要params object数组
            }
            return dataTable;
        }

 

posted @ 2026-07-23 06:38  techNote  阅读(5)  评论(0)    收藏  举报