我有一堆實現接口I
的對象列表。我想製作這些列表的列表,並將它們作爲單個對象進行處理。我試過製作一個List<List<I>>
並添加了我的其他列表,因爲我添加的列表包含的對象實現了I
,但編譯器不讓我這樣做。爲什麼我不能將列表<T:界面>添加到列表<列表<Interface>>?
例子:
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,不,我不能升級到更高版本。
這是關於方差和詭計,你想要什麼是不可能的,在你途中 – Alireza 2014-09-22 13:34:06
還涉及:「在C#中,爲什麼不能一名單對象存儲在一個列表