C#利用反射实现两个类的对象之间相同属性的值的复制
2016-12-12 16:40
627 查看
在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行一个互相的转换,如
这样的两个类
这个时候,A a=new A();B b=new B();
我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制。我们可以写这样一个利用泛型的映射函数
这样我们就可以进行转换了,同样,我们还可以利用字段的访问属性,字段的类型,命名等在进行进一步的删选,我们只需要改变GetProperties()函数和if的判断条件,这样我们就可以进行进一步的筛选。
这个的原理就是利用反射获得两个对象的所有属性字段,然后根据相同的名字进行复制,写法可以有很多种的写法,可以根据不同的属性字段命名的方式来改写。
这样的两个类
class A { int Id; int age; string phone; string Name; string address; } class B { int Id; int age; string phone; string Name; string address; string email; }
这个时候,A a=new A();B b=new B();
我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要写很多行复制语句,麻烦还容易漏掉一些,这个时候可以利用c#的反射来实现复制。我们可以写这样一个利用泛型的映射函数
public static D Mapper<D,S>(S s) { D d = Activator.CreateInstance<D>(); try { var Types = s.GetType();//获得类型 var Typed = typeof(D); foreach(PropertyInfo sp in Types.GetProperties())//获得类型的属性字段 { foreach (PropertyInfo dp in Typed.GetProperties()) { if(dp.Name==sp.Name)//判断属性名是否相同 { dp.SetValue(d, sp.GetValue(s, null), null);//获得s对象属性的值复制给d对象的属性 } } } } catch(Exception ex) { throw ex; } return d; }
这样我们就可以进行转换了,同样,我们还可以利用字段的访问属性,字段的类型,命名等在进行进一步的删选,我们只需要改变GetProperties()函数和if的判断条件,这样我们就可以进行进一步的筛选。
这个的原理就是利用反射获得两个对象的所有属性字段,然后根据相同的名字进行复制,写法可以有很多种的写法,可以根据不同的属性字段命名的方式来改写。
相关文章推荐
- C#利用反射实现两个类的对象之间相同属性的值的复制
- C#用反射实现两个类的对象之间相同属性的值的复制
- C#用反射实现两个类的对象之间相同属性的值的复制
- Java利用反射实现对象之间相同属性复制
- Java -- 利用反射实现对象之间相同属性复制BeanUtil
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- 利用java反射实现两个具有相同属性bean赋值
- java利用反射完成不同类之间相同属性的复制
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- 反射实现两个对象属性名不同之间的映射
- 利用java反射实现两个具有相同属性bean赋值
- 转 利用java反射实现两个具有相同属性bean赋值
- [置顶] 关于不同对象且属性名称也不一样的两个对象之间的复制以及动态对象生成
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
- C# 获得对象属性和属性值 C#利用反射遍历对象的属性和属性值
- C#实现获取不同对象中名称相同属性的方法