【发布时间】:2014-10-20 16:17:15
【问题描述】:
我有一堆实现接口I 的对象列表。我想制作这些列表的列表并将它们作为一个单一的对象进行处理。我尝试创建一个List<List<I>> 并将我的其他列表添加到其中,在我看来这是有道理的,因为我添加的列表包含实现I 的对象,但编译器不允许我这样做。
例子:
public interface I
{
//stuff
}
public class A : I
{
//...
}
public class B : I
{
//...
}
//elsewhere
public class C
{
List<A> ListOfA;
List<B> ListOfB;
List<List<I>> ListOfLists;
public C()
{
ListOfA = new List<A>();
ListOfB = new List<B>();
ListOfLists = new List<List<I>>();
ListOfLists.Add(ListOfA); //nope
ListOfLists.Add(ListOfB); //nope
}
}
我有两个问题,第一个是为什么这是不允许的行为?第二个是我怎样才能完成我正在寻找的东西?
为了澄清,当我尝试将列表添加到 ListOfLists 时,我得到“无法从列表转换为列表”,其中 T : I。我使用的是 .NET 3.5,不,我无法升级到更高版本。
【问题讨论】:
-
这是关于变异和设计,你想要的东西是不可能的