C#利用反射实现两个类的对象之间相同属性的值的复制

Posted Danlis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#利用反射实现两个类的对象之间相同属性的值的复制相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/u013093547/article/details/53584591

今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝不同对象相同属性的值

百度了一下,结果第二个博客就是,地址就是最上面的链接地址

其中主要的就是下面这段代码了

技术分享
 1  /// <summary>
 2         /// 传入类型B的对象b,将b与a相同名称的值进行赋值给创建的a中
 3         /// </summary>
 4         /// <typeparam name="A">类型A</typeparam>
 5         /// <typeparam name="B">类型B</typeparam>
 6         /// <param name="b">类型为B的参数b</param>
 7         /// <returns>拷贝b中相同属性的值的a</returns>
 8         public static A Mapper<A, B>(B b)
 9         {
10             A a = Activator.CreateInstance<A>();
11             try
12             {
13                 Type Typeb = b.GetType();//获得类型  
14                 Type Typea = typeof(A);
15                 foreach (PropertyInfo sp in Typeb.GetProperties())//获得类型的属性字段  
16                 {
17                     foreach (PropertyInfo ap in Typea.GetProperties())
18                     {
19                         if (ap.Name == sp.Name)//判断属性名是否相同  
20                         {
21                             ap.SetValue(a, sp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性  
22                         }
23                     }
24                 }
25             }
26             catch (Exception ex)
27             {
28                 throw ex;
29             }
30             return a;
31         }
创建A拷贝B
技术分享
 1 /// <summary>
 2         /// 传入类型A的对象a,类型B的对象b,将b和a相同名称的值进行赋值给a
 3         /// </summary>
 4         /// <typeparam name="A"></typeparam>
 5         /// <typeparam name="B"></typeparam>
 6         /// <param name="a"></param>
 7         /// <param name="b"></param>
 8         public static void Mapper<A, B>(B b,ref A a)
 9         {
10             try
11             {
12                 Type Typeb = b.GetType();//获得类型  
13                 Type Typea = typeof(A);
14                 foreach (PropertyInfo sp in Typeb.GetProperties())//获得类型的属性字段  
15                 {
16                     foreach (PropertyInfo ap in Typea.GetProperties())
17                     {
18                         if (ap.Name == sp.Name)//判断属性名是否相同  
19                         {
20                             ap.SetValue(a, sp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性  
21                         }
22                     }
23                 }
24             }
25             catch (Exception ex)
26             {
27                 throw ex;
28             }
29         }
传入A拷贝B

 

以上是关于C#利用反射实现两个类的对象之间相同属性的值的复制的主要内容,如果未能解决你的问题,请参考以下文章

C#通过反射实现两个对象相同属性值的复制

利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils

java 反射实现不同对象相同属性值复制

利用Java反射机制实现对象相同字段的复制

C++遍历获得一个类的所有属性名,对该类的实例的所有属性的值 ...~~

C#利用反射来判断对象是否包含某个属性的实现方法