我有2个课程,User
和ExtendedUser
。 ExtendedUser
继承自User
,只添加了2个int
字段 - 没什么特别的。
我有一个User
个对象列表 - List<User>
,并希望查看列表并创建一个ExtendedUser
个对象列表,我只想填写填写缺少的int
字段。
我考虑使用Linq的Select
方法创建新对象,但它不会将User
复制到ExtendedUser
- 所以我需要重新创建那些对我来说没有意义的对象。
编辑:
User
是一个实体,其中ExtendedUser
是从该实体继承的自定义类(但不是实体本身)。
这里最简单的解决方案似乎是构图,虽然在概念上 - 继承会更好。
这里有任何智能解决方案吗? :)
谢谢!
答案 0 :(得分:3)
... Linq创建新对象,但它不会将用户复制到ExtendedUser - 所以我需要重新创建那些对我来说没有意义的对象。
这不是Linq的缺点。
强类型OOP中的一般原理是您不能简单地将基类对象转换为派生对象。这样的转换总是涉及复制成员并引发身份问题(哪个克隆是真实的?)。
换句话说,当一个对象应该属于B类时,它应该永远不会像A类那样开始生命,即使B来自A,所以要重新审视你的设计和整体解决方案。
如果你仍然认为自己需要这个,那么你所拥有的就是将实体转换为DTO,反之亦然。您可以使用AutoMapper等常用工具。