可能重复:
C# variance problem: Assigning List<Derived> as List<Base>
我遇到列表继承问题。它看起来像具有更多指定成员的通用List无法转换为具有其基本成员的列表。 看看这个:
class A
{
public int aValue {get; set;}
}
class B : A
{
public int anotherValue {get; set;}
}
您现在可能希望List<B>
也是List<A>
,但事实并非如此。
List<A> myList = new List<B>()
是不可能的。甚至不是List<A> myList = (List<A>)new List<B>()
我在面向对象编程3年后错过了一些基本概念吗?
答案 0 :(得分:6)
烨!
假设你可以做到
List<A> myList = new List<B>();
然后假设你有一个班级
class C : A { public int aDifferentValue { get; set; } }
C
是A
,因此您可以调用myList.Add(new C())
,因为myList
认为它是List<A>
。
但是C
不是B
所以myList
- 真的 a List<B>
- 不能保持C
1}}。
相反,假设你可以做
List<B> myList = new List<A>();
您可以愉快地致电myList.Add(new B())
,因为B
是A
。
但是假设其他内容在您的列表中卡住C
(因为C
是A
)。
然后myList[0]
可能会返回C
- 这不是B
。
答案 1 :(得分:-2)
不允许进行简单的转换 现在使用
List<B> lb = new List<B> { ... };
List<A> la = lb.Cast<A>().ToList();