反射泛型实例

在项目中使用到DataTable数据装换成List<T>,暂时不太懂原理,先把代码记下来。等后面再来研究。

  #region ConvertHelper
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        class ConvertHelper<T> where T : new()
        {
            /// <summary>
            /// 利用反射和泛型
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public static List<T> ConvertToList(DataTable dt)
            {
                // 定义集合
                List<T> ts = new List<T>();

                // 获得此模型的类型
                Type type = typeof(T);
                //定义一个临时变量
                string tempName = string.Empty;
                //遍历DataTable中所有的数据行
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T();
                    // 获得此模型的公共属性
                    PropertyInfo[] propertys = t.GetType().GetProperties();
                    //遍历该对象的所有属性
                    foreach (PropertyInfo pi in propertys)
                    {
                        tempName = pi.Name;//将属性名称赋值给临时变量
                        //检查DataTable是否包含此列(列名==对象的属性名)
                        if (dt.Columns.Contains(tempName))
                        {
                            // 判断此属性是否有Setter
                            if (!pi.CanWrite) continue;//该属性不可写,直接跳出
                            //取值
                            object value = dr[tempName];
                            //如果非空,则赋给对象的属性
                            if (value != DBNull.Value)
                                pi.SetValue(t, value, null);
                        }
                    }
                    //对象添加到泛型集合中
                    ts.Add(t);
                }
                return ts;
            }
        }
        #endregion
时间: 2024-10-13 00:16:57

反射泛型实例的相关文章

框架学习前基础加强 泛型,注解,反射(泛型&注解)应用案例,IOC,Servlet3.0,动态代理,类加载器

泛型 1. 泛型类 :具有一个或多个类型变量的类,称之为泛型类! class A<T> { } 2. 在创建泛型类实例时,需要为其类型变量赋值 A<String> a = new A<String>(); * 如果创建实例时,不给类型变量赋值,那么会有一个警告! 3. 泛型方法 :具有一个或多个类型变量的方法,称之为泛型方法! class A<T> { public T fun(T t1) {} } fun()方法不是泛型方法!它是泛型类中的一个方法! pu

DataReader反射泛型对象

昨天听同学说,要把DataReader对象转成实体对象,要写一个通用的方法.想了下用反射应该可以做到.项目中一般都是用第三方组件来做数据访问层,如,Nhibernate.ef等.于是自己想写个简单例子玩玩. 其实,实现起来和简单.一个泛型方法搞定.代码如下: 1 public List<T> ToList<T>(string _sql) where T :class ,new() 2 { 3 4 using (var conn = new SqlConnection(connStr

利用反射创建实例强制转换为接口失败小结

最近码代码是遇到一个很奇怪的问题,利用反射创建实例对象后强制转换为接口类型时抛出异常 然后看了下类的继承关系 没有问题,查看代码用 m_queryImplementAssembly = Assembly.Load(m_queryImplementAssemblyName); m_queryImplementAssembly.CreateInstance(strInstanceName);也不应该会出问题, 后来换了一种方式Activator.CreateInstance仍然无果.就这样纠结了一天

java反射技术实例

java反射技术实例?1. [代码][Java]代码     package com.gufengxiachen.java.reflectiontest; public class Person {private String name;private int age;private static int total;public Person(){super();total++;}public Person(String name,int age){super();this.name=name

反射泛型,Dao设计模型 (编码时需要用到)

Dao package com.xiaofan.reflect; import java.io.Serializable; public interface Dao<T> { /** * 添加实体(Entity--Domain)数据到数据库中 * @param t */ void save(T t); /** * 修改数据库中的实体 * @param t */ void update(T t); /** * 根据主键删除记录 * @param pk */ void delete(Seriali

C#反射--------创建对象实例

C#反射--------创建对象实例 C#创建对象实例共有三种方法 (1)通过System.Reflection.Assmbly里方法获得实例,主要根据类的Fullname和构造函数的参数创建实例,包括了私有和公有的,很强大  public object CreateInstance(string typeName);//使用区分大小写的方式找到指定的类型名称,FullName, public object CreateInstance(string typeName, bool ignoreC

反射+泛型抽取公用utils

反射+泛型 import java.lang.reflect.Field; public class Hac<T> { public static void main(String[] args) throws Exception{ Student student = new Student(); new Hac<Student>().writeRecord(student); } public synchronized void writeRecord(T t) throws E

C#中反射泛型 CreateInstance

假设1我有个类叫SortClass,类中有个BubbleSort(int[] array)用于给数组进行排序. 假设2我有个类叫SortT<T>,类中有个BubbleSort(T[] array)用于给数组进行排序. 现在我需要在控制台应用程序里通过反射调用BubbleSort方法为数组int[] array进行排序. int[] array = new int[] { 1,7,98,165,4,8,97 }; 假设1中由于类和方法不是泛型,实现起来比较简单,我就不多说了.具体代码如下: 需要

Java下的框架编程(反射,泛型,元数据,CGLib,代码动态生成,AOP,动态语言嵌入)

Java 虽然没有动态语言般暴起,但仍然天连天,水接水的生出好多框架技术---反射(reflection),泛型(generics),元数据(annotation),proxies(proxy/cglib),代码动态生成(asm),AOP(aspectJ),动态语言嵌入(groovy/javascript/beanshell).面对着这些,我们像一夜暴富的农企,有点手足无措的样子. 反射是一种让框架能够根据 "以字符串形式存在的信息" 来调用对象的属性和函数的技术,是Java对C++最