将List<Descendant>转换为List<Base>的最简单方法

3

我有这样一个类结构:

abstract class Base{}
class Descendant : Base{}

我有另一个类需要一个类型为List<Base>的列表。我知道我可以将Descendant实例添加到List<Base>中,但我认为在这里保持更强的类型会更好。

List<Descendant>转换为List<Base>的最简单方法是什么?

1个回答

5

使用LINQ:

List<Descendant> descendants = ...;

descendants.Cast<Base>().ToList();

1
你还应该寻找通用的协变性和逆变性。 - coding4beer
嗯,看起来由于某些原因,Mono没有.Cast方法 :( - Earlz
即使您添加了“using System.Linq;”,也是这样吗? - Foole
1
@Foole 哦,诀窍是(也许)使用 System.Linq 并引用 System.Core - Earlz
@Earlz:请注意,您将拥有两个指向相同对象的不同列表(除非它们是值类型),即从一个列表中添加或删除项目不会影响另一个列表,但更改一个列表中对象的内部状态将在两个列表中都可见。这与强制转换不同,因为您正在处理相同的对象(在本例中是同一列表)。因此,这个答案并没有像您最初请求的那样将列表强制转换,但如果它的行为在您的情况下是可以接受的,那么它确实是最简单的方法(所以+1)。 - Allon Guralnek
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接