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

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

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

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

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

C#利用反射实现两个类的对象之间相同属性的值的复制C#利用反射实现两个类的对象之间相同属性的值的复制
1  ///
 2         /// 传入类型B的对象b,将b与a相同名称的值进行赋值给创建的a中
 3         ///
 4         /// 类型A
 5         /// 类型B
 6         /// 类型为B的参数b
 7         /// 拷贝b中相同属性的值的a
 8         public static A Mapper(B b)
 9         {
10             A a = Activator.CreateInstance();
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

C#利用反射实现两个类的对象之间相同属性的值的复制C#利用反射实现两个类的对象之间相同属性的值的复制
1 ///
 2         /// 传入类型A的对象a,类型B的对象b,将b和a相同名称的值进行赋值给a
 3         ///
 4         ///
 5         ///
 6         ///
 7         ///
 8         public static void Mapper(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

fighting

Original: https://www.cnblogs.com/danlis/p/7723280.html
Author: Danlis
Title: C#利用反射实现两个类的对象之间相同属性的值的复制

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/543115/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Switchhosts没有写入host文件的权限的解决方法

    第一次使用Switchhosts来修改host,记录一下遇到的小问题,这个通用的解决方法很多博客都记录了,浅浅说一下传统的解决思路,以及自己遇到的一个小tips! 通用解决方法: …

    Java 2023年6月5日
    093
  • SQL执行顺序

    首先select语句中都会用到哪些关键字: select ,from,join,where,group by,having,order by,limit 其次,要知道每执行一步就会…

    Java 2023年6月9日
    095
  • springboot修改接口入参出参实现入参加密出参解密

    一、背景 针对项目已经开发完的接口,都需要加上传输数据加密的功能,对接口入参进行AES解密,对接口出参进行加密。考虑到尽量改动少点,使用自定义注解结合springmvc里的Requ…

    Java 2023年5月30日
    081
  • 方法(Java)

    什么是方法? 基本介绍 在其他语言中也叫函数 System.out.println();类名.对象.方法; Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步…

    Java 2023年6月9日
    077
  • IDEA导入maven项目后,右侧没有maven栏,build失败

    先在view的tools windows里看看有没有maven没有的话 在help里搜功能add maven project 看能不能成功 不能的话如果原因是[FATAL_ERRO…

    Java 2023年6月5日
    087
  • java序列化

    java序列化的方式 (1)实现Serializable接口,在方法中定义readObject()与wirteObject()方法(注意这两个方法是要去自己定义的而且固定格式,并不…

    Java 2023年6月8日
    085
  • Java线程数过多解决之路——利用Arthas解决Jenkins线程数飙升问题

    背景 Jenkins是基于Java开发的一款持续集成工具,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。同时,Jenkins 提供了数量庞大的各种插 件,以满足用户对…

    Java 2023年6月9日
    0123
  • 2020年度钻石C++C学习笔记(3)–《博学谷》

    1.Unix/Linux操作系统介绍 1.1 操作系统的作用 1.1.1 操作系统的目标 l 方便:使计算机系统易于使用 l 有效:以更有效的方式使用计算机系统资源 l 扩展:方便…

    Java 2023年6月7日
    087
  • Java-Collection、Map和Array之间的转换

    设个User类: public class User { private String userName; private String userId; private Strin…

    Java 2023年6月8日
    083
  • JAVA 基础(1)开发环境的搭建以及开发工具的选择

    我们现在还是在学习阶段因此我们不用配置那么多的jdk,配置一个jdk8就够应付日常的学习了。前面的文章我尽量写详细一些照顾刚入坑的朋友。后文还有教大家怎么使用企业版的idea。 一…

    Java 2023年6月13日
    072
  • 第四周(实际是n+周)

    报错内容:ERROR RUNNING ‘TOMCAT’: UNABLE TO OPEN DEBUGGER PORT (127.0.0.1:38667): J…

    Java 2023年6月7日
    096
  • Springboot国际化信息(i18n)解析

    国际化信息理解 国际化信息也称为本地化信息 。 Java 通过 java.util.Locale 类来表示本地化对象,它通过 “语言类型” 和 &#8220…

    Java 2023年5月30日
    0107
  • Java基础

    环境 并非所有的计算机都可以开发java程序,java程序的开发与运行需要专门的环境。 因为java语言的程序是运行在java所专有的系统中。 要运行java程序我们需要在操作系统…

    Java 2023年6月7日
    0136
  • Java maven反应堆构建学习实践

    实践环境 Apache Maven 3.0.5 (Red Hat 3.0.5-17) 应用示例 maven示例项目组织结构如下 maven-study │ p…

    Java 2023年5月29日
    079
  • MySQL-InnoDB-MVCC多版本并发控制

    一、MySQL可重复读级别下,因为MVCC引起的BUG,下图1为相应的Java代码,其中事务1的生命周期最长,循环开启的事务2、3、4。。。与事务1并行 ,数据的读取只会成功一次,…

    Java 2023年6月16日
    049
  • springboot @ConfigurationProperties注册源码解析-松散绑定

    参考:https://wenku.baidu.com/view/ccfcf417598102d276a20029bd64783e09127def.html https://blog…

    Java 2023年5月30日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球