![]() |
1
1
但你呢
复制子类中的属性而不使用反射之类的东西。但是即使使用反射,您也需要一些关于不同子类之间属性映射的知识,比如复制
因此,您需要为每个(允许的)子类转换编写单独的实现。
编辑 你可以用 MemberwiseClone 方法创建对象的副本。
注:
你应该意识到你不能克隆一个
|
![]() |
2
6
您所缺少的是,您要求编译器知道T可能是D1和D2类型之一,而您所说的只是T是一个基。怎么可能知道你的对象是什么属性甚至类型,因为这些信息只有在运行时才知道。即使你
能够
去
例如,
等等等等。 |
![]() |
3
2
您可以使用架构更改来解决这个问题,并使用“PropertyBag”来存储每个类的属性。
PropertyBag本质上是
所以现在要聚合派生类的所有属性,可以公开它们的“raw”PropertyBag并遍历它。 就像我之前说过的,propertyBag不是类型安全的,所以如果层次结构中有两个类具有相同的属性名,但类型不同,那么您就有麻烦了。 编辑:如果您关心性能,那么您将不得不以多种方式实现这个功能,并对不同的实现进行性能测试——老实说,PropertyBag是否真的比使用反射更快。 |
![]() |
4
1
我认为copy方法应该由派生类D1、D2继承,它们负责将自己的属性复制到其他类型中。 |
![]() |
5
0
我要做的是创建一个 extension method
然后你可以在你的对象中调用它,比如:
我没有测试,所以不确定它是否能像描述的那样工作。在我所从事的一个大项目中,我做了一些类似于将数据行转换成实体的事情。 |