zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    (原)在ubuntu 中安装 swi prolog 和 简单的使用
    (转) 新手入门:C/C++中的结构体
    (转) eclipse debug (调试) 学习心得
    flutter: 根视图、根元素与根渲染
    eggjs的参数校验模块egg-validate的使用和进一步定制化升级
    Vue源码中用到的工具函数
    21 项优化 React App 性能的技术
    react-redux 的使用
    编写 Vue.js 组件前需要知道的 10 件事
    Flutter实现抽屉动画效果
  • 原文地址:https://www.cnblogs.com/danlis/p/7723280.html
Copyright © 2011-2022 走看看