• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


原文地址:https://blog.csdn.net/u013093547/article/details/53584591


在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行一个互相的转换,如

这样的两个类

[csharp] view plain copy

  1. class A 
  2. int Id; 
  3. int age; 
  4. string phone; 
  5. string Name; 
  6. string address; 
  7. class B 
  8. int Id; 
  9. int age; 
  10. string phone; 
  11. string Name; 
  12. string address; 
  13. string email; 

这个时候,A a=new A();B b=new B();
我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制。我们可以写这样一个利用泛型的映射函数

[csharp] view plain copy

  1. public static D Mapper<D,S>(S s) 
  2.        { 
  3.            D d = Activator.CreateInstance<D>(); 
  4. try
  5.            { 
  6.                var Types = s.GetType();//获得类型
  7.                var Typed = typeof(D); 
  8. foreach(PropertyInfo  sp in Types.GetProperties())//获得类型的属性字段
  9.                { 
  10. foreach (PropertyInfo dp in Typed.GetProperties()) 
  11.                    { 
  12. if(dp.Name==sp.Name)//判断属性名是否相同
  13.                        { 
  14.                            dp.SetValue(d, sp.GetValue(s, null), null);//获得s对象属性的值复制给d对象的属性
  15.                        } 
  16.                    } 
  17.                } 
  18.            } 
  19. catch(Exception ex) 
  20.            { 
  21. throw ex; 
  22.            } 
  23. return d; 
  24.        } 

这样我们就可以进行转换了,同样,我们还可以利用字段的访问属性,字段的类型,命名等在进行进一步的删选,我们只需要改变GetProperties()函数和if的判断条件,这样我们就可以进行进一步的筛选。

这个的原理就是利用反射获得两个对象的所有属性字段,然后根据相同的名字进行复制,写法可以有很多种的写法,可以根据不同的属性字段命名的方式来改写。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#datetime与timeStamp时间戳互相转换发布时间:2022-07-18
下一篇:
c#配置系统未能初始化发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap