当前位置:首页 > 网络编程 > 软件语言 > .NET > 用反射给实体赋值

用反射给实体赋值

点击次数:70 次 发布日期:2008-11-06 07:52:44 作者:源代码网
源代码网推荐
广告载入中

源代码网整理以下在系统开发过程中,有一些代码是必须反复写的.比如实体的赋值过程(不用实体的免看). 软件开发网 www.mscto.com

源代码网整理以下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出来.

源代码网整理以下基本原理就是这样子..


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华