1

这似乎是正确的:

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 );

为什么第二个不正确?

4

4 回答 4

12

因为您正在尝试添加一些IList实现而不是List类,这是定义的要求 - IList< List >。看这个:

IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new Collection<string>(); // ooops!
MyList .Add(List_Temp );

示例的第二行是正确的,因为Collection<T>implements IList<T>,但第三行是不正确的,因为Collection<T>不继承List<T>

于 2012-09-05T07:48:20.563 回答
3

MyList包含 type 的元素,List<string>但您正在尝试添加 type 的元素IList<string>

于 2012-09-05T07:48:48.690 回答
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>. 反之亦然。

于 2012-09-05T07:51:02.103 回答
0

每次添加到列表时,对象类型都应该相同,您的 mylist 列表对象类型是列表,并且您曾经在其中添加 iList

于 2012-09-05T07:53:03.337 回答