0

可能重复:
C# 差异问题:将 List<Derived> 分配为 List<Base>

我对列表继承有疑问。看起来具有更多指定成员的通用列表无法转换为具有其基本成员的列表。看这个:

class A
{
    public int aValue {get; set;}
}

class B : A
{
    public int anotherValue {get; set;}
}

您现在可能认为 aList<B>也是 a List<A>,但事实并非如此。 List<A> myList = new List<B>()不可能。List<A> myList = (List<A>)new List<B>()在面向对象编程 3 年后,我是否在这里遗漏了一些基本概念?

4

2 回答 2

6

是的!

假设你可以做

List<A> myList = new List<B>();

然后假设你有一堂课

class C : A { public int aDifferentValue { get; set; } }

AC是 a A,因此您希望能够调用myList.Add(new C())asmyList认为它​​是 a List<A>

但是 aC不是 aB所以 a myList- 这真的是 a List<B>- 不能持有 a C


相反,假设你可以做

List<B> myList = new List<A>();

您可以愉快地调用myList.Add(new B()),因为 aBA.

C但是假设你的列表中有其他东西 a (就像Ca一样A)。

然后myList[0]可能会返回一个C- 这不是一个B.

于 2012-12-10T14:33:03.480 回答
-2

不允许简单的转换 现在使用

List<B> lb = new List<B> { ... };
List<A> la = lb.Cast<A>().ToList();
于 2012-12-10T14:32:22.720 回答