C#列表如何<;IList>;接受列表<;T>;但不是IList<;T>;在创建集合时?
我正在尝试创建一个集合集合,比如2D数组。 但是,每个集合(在主集合中)都将是相同的类型。只是我们不知道这些类型是什么 例如: 包含以下内容的集合: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>();
-猫的名单
-房屋清单
-一系列问题 因此,一个包含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正在制作列表。