假设我有两个班级:A&乙
public class A
{
public string p1{get;set};
public string p2{get;set};
}
public class B : A
{
public string p3{get;set};
}
我有一个来自A类的对象'a',我想从B类创建一个对象'b',它复制'a'中的所有属性值。通常,我必须这样做:
B b = new B();
b.p1 = a.p1;
b.p2 = a.p2;
使用此解决方案,如果必须手动分配,我必须丢失许多代码。有什么解决方案吗?感谢。
答案 0 :(得分:4)
您可以使用类似http://automapper.codeplex.com/的内容,使用预定义规则自动将源对象的属性映射到目标对象。
然后就像配置一样简单:
Mapper.CreateMap<A, B>();
创建这样的新对象:
B b = Mapper.Map<B>(a);
答案 1 :(得分:0)
如果您愿意,可以使用反射编写自己的保湿器,以便比较对象属性,名称和类型。
或者您可以使用另一个答案中提到的automapper。
第三种解决方案是在代码中内化自适应。由于“B”知道“A”,所以
public class B : A
{
public string p3{get;set};
public void Hydrate{A a}
{
this.p1 = a.p1;
this.p2 = a.p2;
}
}
然后你的代码将是这样的
B b = new B();
b.Hydrate(a);