这似乎是正确的:
IList<IList<string>> MyList = new List<IList<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );
这似乎不正确:
IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );
为什么第二个不正确?
答案 0 :(得分:12)
因为您尝试添加一些IList
实现而不是List
类,这是定义的要求 - IList&lt; 列表&gt;。看看这个:
IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new Collection<string>(); // ooops!
MyList .Add(List_Temp );
第二行示例是正确的,因为Collection<T>
实现了IList<T>
,但第三行不正确,因为Collection<T>
没有继承List<T>
。
答案 1 :(得分:3)
MyList
包含List<string>
类型的元素,但您尝试添加IList<string>
类型的元素。
答案 2 :(得分:1)
编译器说它无法将"System.Collections.Generic.IList<string>"
投射到"System.Collections.Generic.List<string>"
;
List<T>
定义如下:
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
而IList<T>
是
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
因此,List<T>
可以投放到IList<T>
。反之亦然。
答案 3 :(得分:0)
对象类型应该相同,您的mylist列表对象类型是列表,并且您曾经在其中添加iList