1

我正在尝试与您通常做的相反的方式。

我有两个 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

结果是在其他情况下将值从对象 A 手动映射到 B。必须有更聪明的方法来做到这一点......有什么建议吗?

4

2 回答 2

0

我会将“智能”方式视为您的最后一个建议 - 为 B 编写一个知道如何从 A 实例化自身的复制构造函数。

于 2009-08-20T07:51:52.167 回答
0

如果您实际上是在更改类型(而不是强制转换) - 那么如果您只有几个类,那么只需编写转换代码 - 也许一个B接受模板的 ctor A。如果你有很多类......你可以使用动态代码或序列化来做一些技巧。PropertyCopy例如,在MiscUtil中将执行此操作(使用动态Expression非常快速地完成工作):

A a = new A { Foo = 1 };
B b = PropertyCopy<B>.CopyFrom(a);
b.Bar = 2;
于 2009-08-20T07:58:08.893 回答