gpt4 book ai didi

generics - 为什么采用 IEnumerable 的函数不接受 IEnumerable

转载 作者:行者123 更新时间:2023-12-04 16:25:13 25 4
gpt4 key购买 nike

比如说,我有一个类:

public class MyFoo : IMyBar
{
...
}

然后,我想使用以下代码:
List<MyFoo> classList = new List<MyFoo>();
classList.Add(new MyFoo(1));
classList.Add(new MyFoo(2));
classList.Add(new MyFoo(3));

List<IMyBar> interfaceList = new List<IMyBar>(classList);

但这会产生错误:
`Argument '1': cannot convert from 'IEnumerable<MyFoo>' to 'IEnumerable<IMyBar>' 

为什么是这样?由于 MyFoo 实现了 IMyBar,人们会期望 MyFoo 的 IEnumerable 可以被视为 IMyBar 的 IEnumerable。一个平凡的现实世界的例子是生成一个汽车列表,然后被告知它不是一个车辆列表。

这只是一个小小的烦恼,但如果有人能对此有所了解,我将非常感激。

最佳答案

这将在 C# 4.0 中工作!你所说的称为泛型协方差。

同时,您可以使用 Cast extension method :

List<IMyBar> interfaceList = new List<IMyBar>(classList.Cast<IMyBar>());

关于generics - 为什么采用 IEnumerable<interface> 的函数不接受 IEnumerable<class>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2495886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com