Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#列表如何<;IList>;接受列表<;T>;但不是IList<;T>;在创建集合时?_C# - Fatal编程技术网

C#列表如何<;IList>;接受列表<;T>;但不是IList<;T>;在创建集合时?

C#列表如何<;IList>;接受列表<;T>;但不是IList<;T>;在创建集合时?,c#,C#,我正在尝试创建一个集合集合,比如2D数组。 但是,每个集合(在主集合中)都将是相同的类型。只是我们不知道这些类型是什么 例如: 包含以下内容的集合: -猫的名单 -房屋清单 -一系列问题 因此,一个包含3个集合的集合 现在,我正在尝试以下C#代码,并在尝试执行此操作时出现编译时错误: IList<Foo> foos1 = new List<Foo>(); // e.g. Cats. List<Foo> foos2= new List<Foo>();

我正在尝试创建一个集合集合,比如2D数组。 但是,每个集合(在主集合中)都将是相同的类型。只是我们不知道这些类型是什么

例如:

包含以下内容的集合:
-猫的名单
-房屋清单
-一系列问题

因此,一个包含3个集合的集合

现在,我正在尝试以下C#代码,并在尝试执行此操作时出现编译时错误:

IList<Foo> foos1 = new List<Foo>(); // e.g. Cats.
List<Foo> foos2= new List<Foo>(); // e.g. Houses.

var fails = new List<IList>
{
   foos1 // Fails
};

var works = new List<IList>
{
   foos2 // Works
};

IList foos1=new List();//e、 g.猫。
List foos2=新列表();//e、 g.住房。
var失败=新列表
{
foos1//失败
};
var works=新列表
{
foos2//Works
};
有人能解释一下为什么会这样吗?

IList
实现了以下接口:
ICollection
IEnumerable
IEnumerable

List
实现以下接口
IList
ICollection
IEnumerable
IEnumerable
IList
ICollection
IReadOnlyList
,以及
IReadOnlyCollection


因此,
IList
不能转换为
IList
,但是
列表可以。

我不理解你的问题。为什么
失败
示例不失败?列表元素类型为
IList
。而
IList
不实现/继承
IList
。因此,您试图将不兼容类型的对象放入列表中。泛型的全部意义在于,这样的场景就不起作用了。你为什么需要任何解释?我只能猜测你的问题是,为什么泛型的
IList
不继承
IList
。请参见复制。
IList
是协变的,
List
不是协变的。这是C#的一个限制,现在他们最终会解决。@Dai-这与这个问题无关。@Enigmativity我的错误-我承认我没有读过这个问题,我只是浏览了一下代码,并假设这就是问题所在:)@Dai-是的,这是我的第一个想法。然后我意识到OP正在制作列表。