码迷,mamicode.com
首页 > 其他好文 > 详细

2016.5.23 用反射技术为实体类变量赋值、取值

时间:2016-10-15 19:24:55      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

clobj是任意一个数据库表对应的实体类空白实例 TERMINAL_PRO clobj= new TERMINAL_PRO();

 

            DataRow row = dtt.Rows[0];

            Type t = clobj.GetType();

            foreach (PropertyInfo pi in t.GetProperties()) //不用考虑属性的类型

            {

                string name = pi.Name; //获得此属性名称

 

                if (dtt.Columns.Contains(name))

                {

                    object ob = row[name];

                    pi.SetValue(clobj, ob.IsEmptyOrNull() ? null : Convert.ChangeType(ob, pi.PropertyType), null);

                }

            }

至此clobj赋值完成,各种类型的变量根据DataRow类型完成赋值

pi.SetValue(pro,value,null) 将value赋值给pro实例的pi对应属性,value和pi类型必须统一,所以1要判断是否null,2要进行类型转换Convert.ChangeType(ob, pi.PropertyType)

 

//简化insert into 及反射赋值技术

string sql_insert = string.Format("insert into {0}.{1} ( ", AisLogical.dbuser, "TERMINAL_PRO_DOUBLE");

string sql_value = string.Format("values ( ");

 

            Type t = pro.GetType();

            foreach (PropertyInfo pi in t.GetProperties())

            {

                string name = pi.Name; //获得此属性名称

                object value = pi.GetValue(pro, null);//获得此属性值

 

                sql_insert += name + ", ";

                if (pi.PropertyType == typeof(string)) //属性的类型判断  

                {

                    sql_value += string.Format(" ‘{0}‘, ", value);

                }

                else

                    sql_value += value+",";

 

            }

 

pi.GetValue(pro, null); 获取pro对象对应pi属性的值。

 

此外,函数调用中的ref关键字只对简单变量有效,如果是实例作为参数,即使不加ref,调用结束后此实例仍然保留了函数中的赋值过程。原理是,如果不用ref修饰参数变量,调用函数就复制此参数进入函数调用。但对实例参数,这种拷贝是浅拷贝,所以跟带了ref前缀效果一样。

2016.5.23 用反射技术为实体类变量赋值、取值

标签:

原文地址:http://www.cnblogs.com/mol1995/p/5965000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!