欢迎光临
我们一直在努力

运用反射给实体赋值-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

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

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.呵呵有空再切磋咯

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

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 运用反射给实体赋值-.NET教程,Asp.Net开发
分享到: 更多 (0)