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

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前缀效果一样。

时间: 2024-10-16 16:58:08

2016.5.23 用反射技术为实体类变量赋值、取值的相关文章

2016 系统设计第一期 (档案一)jQuery radio 取值赋值

MVC代码: <div class="form-group"> <label for="Gender" class="col-sm-2 control-label">性别</label> <div class="col-md-8"> <label class="checkbox-inline"> @Html.RadioButton("Ge

java中从实体类中取值会忽略的的问题

在我们java Map中通过get来取值时会忽略的问题是:如果取得一个空值null时,那么.toString()时就会出错,而且不知道是什么原因. 现在我给的具体方法是用条件表达式先判断一下. 例: Map<String, Object> dv = new HashMap<String,Object>(); dv.put("kye", "value"); deviceId = dv.get("kye") != null ?

Android利用反射机制为实体类属性赋值

在做android项目时,有时会遇到从网络上获取json类型数据,赋值给实体类,实体类属性少可以一个一个的赋值,如果实体类有很多属性,赋值可能就要耗很长的功夫了,幸好Java给我们提供了反射机制.下面是在我在android中如何利用java反射机制给实体类赋值. 在Android中利用反射机制为实体类属性赋值,首先需要导入一下两个包 import java.lang.reflect.Field; import java.lang.reflect.Method; 给实体类赋值首先需要一个实体类,这

Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框.关于AlertDialog的基本用法在这里就不详细介绍了,网上有很多,读者可以自己搜索.那么本文要介绍的是如何随心所欲地控制AlertDialog.     现在我们来看看第一个需求:如果某个应用需要弹出一个对话框.当单击“确定“按钮时完成某些工作,如果这些工作失败,对话框不能关闭.而当成功完成工

小怪兽 Java反射技术 等你来打

Java反射技术,是java的难点,也是程序员进化过程中的必打小怪兽,这里就根据java api好好研究一下java的反射技术. Class Fields Methods 请先回忆一下[java类的定义]. 一.反射是什么 反射是什么?百度百科这样定义:JAVA反射机制是在运行状态下,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取对象信息以及动态调用对象方法的功能称为java语言的反射机制. 可以这样理解,大家小时候有木有玩过平

Java中类加载机制和反射技术

我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这时是可以手动将一个对象转换为运行时的类型. 其二,如果我们在编译时无法预知对象和类到底是属于哪些类,那么程序只有依靠运行时的信息来发现对象和类的真实的信息了,这时就必须要用到反射技术. 在谈具体的发射技术之前,我想先回顾下,有关类的加载的一些基本的性质和原理,以方便我们更好地理解,反射的作用和特点.

C#反射技术概念作用和要点

反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等.有了反射,即可对每一个类型了如指掌.如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道. 1..NET可执行应用程序结构 程序代码在编译后生成可执行的应用,我们首先要了解这种可执行应用程序的结构. 应用程序结构分为应用程序域—程序集—模块—类型—成员

.Net Reflection反射技术

这里写一下个人对.Net下反射技术的理解: 第一部分:个人讲讲反射 反射机制是一种运行时获取类(Type对象)和动态调用对象的成员的机制. a.可以获取有关已加载的程序集和在其中定义的类型(如类.接口和值类型)的成员信息: b.可以使用反射在运行时创建指定类的对象,以及调用和访问这些对象的成员. 这种动态获取的信息以及动态调用对象的方法的功能称为反射机制. 比如在myReflect.UI下定义了一个MyLyfeng类: public class MyLyfeng    {       //无参构

反射技术菜鸟从入门到精通(一)

前言 俗话说得好:“反射反射,程序员的快乐” .用好反射,可以使你的开发效率事半功倍.反射技术作为Java特性,已经成为框架构建的基础.如果灵活掌握反射,可谓“一步登天”! 什么是反射? JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载.操作.使用在编译期并不知道