运用反射给实体赋值

王朝other·作者佚名  2006-12-19
窄屏简体版  字體: |||超大  

在系统开发过程中,有一些代码是必须反复 写的.比如实体的赋值过程(不用实体的免看).

Eg: XXX.xxx=XXX

虽然可以通过codesmith来生成赋值,但是免不了代码冗长.如果是根据数据库生成的话,我们还要删除非必要的属性.而且过分依赖数据库.

特别是当你需要不同实体之间进行相同属性拷贝时,你必须一个属性一个属性赋值.实在太烦了.

我在做个java项目时无意发现了一个PropertyUtils类.就是用来属性复制的类,探究原理之后.发现其实.net里也是同样可以实现的.

.net的反射就是实现的办法. using System.Reflection;

/// <summary>

/// 对象属性拷贝(全匹配拷贝)

/// </summary>

/// <param name="obj1">源对象</param>

/// <param name="obj2">目标对象</param>

/// <returns>目标对象</returns>

public static object PropertyCopy(object obj1,object obj2)

{

Type souType=obj1.GetType();

Type tarType = obj2.GetType();

PropertyInfo[] pis=souType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

if(null!=pis)

{

foreach(PropertyInfo pi in pis)

{

string propertyName=pi.Name;

PropertyInfo pit=tarType.GetProperty(propertyName);

if(pit !=null)

{

pit.SetValue(obj2,pi.GetValue(obj1,null),null);

}

}

}

return obj2;

}

实际上可以只传两个Type进来也可以的.

但是这个有个问题,就是当两个实体的同名属性类型不匹配时,会抛意外.我这个只是个例子,没有try出来.

基本原理就是这样子.呵呵.我的代码风格一般,估计看坏大家的眼睛了.

我自己做了个类似Nhibernate的数据绑定(暂时支持单表),完善ing.呵呵有空再切磋咯

如果有什么问题,欢迎大家指正

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航