我试图采取与你通常做的相反的方式。
我有两个POCO类A和B,其中B继承自A
public class A
{
public int Foo { get; set; }
}
public class B : A
{
public int Bar { get; set; }
}
B是对A的延伸,附加信息。
我首先要有一个A类实例
A a = new A { Foo = 1 };
然后我希望用附加信息扩展A类中的信息并获得最终的B类。我可以将A类中的每个属性映射到B类中的属性,但它对我没有多大意义:
A a = new A { Foo = 1 };
B b = new B { Foo = a.Foo, Bar = 2 };
或者在构造函数
中A a = new A { Foo = 1 };
B b = new B(a) { Bar = 2 }; // Mapping of value Foo is done in constructor of object B
结果是eather案例中从对象A到B的值的手动映射。 必须有一个更聪明的方法来做这个...任何建议?
答案 0 :(得分:0)
我认为“聪明”的方式是你的最后一个建议 - 为B知道如何从A实例化自己的复制构造函数。
答案 1 :(得分:0)
如果您实际上正在更改类型(而不是强制转换) - 那么如果您只有几个类,那么只需编写转换代码 - 也许是B
接受模板A
的ctor。如果你有很多课程......你可以用动态代码或序列化来做一些技巧。 MiscUtil中的PropertyCopy
会执行此操作,例如(使用动态Expression
来快速完成工作):
A a = new A { Foo = 1 };
B b = PropertyCopy<B>.CopyFrom(a);
b.Bar = 2;