zoukankan      html  css  js  c++  java
  • C# 反射

    1 什么是反射

     我所理解的反射,程序运行时动态的去获取程序集里的类、其中的方法,或者获取一个类里的属性、方法。

    我们用VS开发项目,引用一个DLL时,可以看到这个程序集里的方法,这其实就是VS自带的反射实现的,自动反射出其中的属性方法等等。

    如果是在运行时才动态去引用别的程序集呢?这时候就需要用到反射了。

    再例如,常用到的有把一个Datatable中的数据填充到实体类列表中。

    常规的用 user.Name=dr["Name"].Tostring();自己写代码去对应,如果代码量很多,对性能要求不是太高的时候也可以用反射来完成。

    下边列出简单处理代码,大家可以看看

     public class User
        {
            public string Name { get; set; }
    
            public int Id { get; set; }
    
            public double Money { get; set; }
            public DateTime AddTime { get; set; }
        }
    public  List<T> ConvertDatableToList<T>(DataTable dt)
            {
                if (dt == null)
                {//为空,无列直接返回null
                    return null;
                }
                List<T> list = new List<T>();
                int intLen = dt.Rows.Count;
    
                ///循环DataTable中的每一行,进行处理
                for (int i = 0; i < intLen; i++)
                {
                    T obj = default(T);
    
                    obj = Activator.CreateInstance<T>();//创建类的一个实例
    
                    ///循环DataTable的列,用列名与对应实体类中的属性名字,一般情况下不要反过来赋值
                    foreach (DataColumn column in dt.Columns)
                    {
                        PropertyInfo info = obj.GetType().GetProperty(column.ColumnName);//获取实体类中的属性集合
                        try
                        {
                            object value = dt.Rows[i][column.ColumnName];//取出该列的值
                            info.SetValue(obj, value, null);//用索引属性的可选索引值设置该属性的值
                        }
                        catch (Exception ex)
                        {
    
                        }
                    }
                    list.Add(obj);
                }
    
                return list;
            }
     1  private void test_Click(object sender, RoutedEventArgs e)
     2         {
     3             DataTable dt = new DataTable();
     4             dt.Columns.Add("Name", Type.GetType("System.String"));
     5             dt.Columns.Add("Id", Type.GetType("System.Int32"));
     6             dt.Columns.Add("Money", Type.GetType("System.Double"));
     7             dt.Columns.Add("AddTime", Type.GetType("System.DateTime"));
     8 
     9             DataRow dr = null;
    10             for (int i = 0; i < 3; i++) {
    11 
    12                 dr = dt.NewRow();
    13 
    14                 dr[0] = ""+i.ToString();
    15                 dr[1] = i;
    16                 dr[2] = i*0.003;
    17                 dr[3] = DateTime.Now; 
    18                 dt.Rows.Add(dr);
    19             }
    20 
    21             List<User> list = ConvertDatableToList<User>(dt);
    22         }

    今天先写到这里,下次继续。


     

  • 相关阅读:
    使用ftp软件上传下载php文件时换行丢失bug
    #1045
    wamp虚拟主机的配置 .
    css3很酷的加载动画多款
    理解CSS3 transform中的Matrix(矩阵)
    好吧,CSS3 3D transform变换,不过如此!
    js流程控制语句
    js变量
    js函数
    Gym 100507I Traffic Jam in Flower Town (模拟)
  • 原文地址:https://www.cnblogs.com/cad2/p/4390052.html
Copyright © 2011-2022 走看看