说,例如,我有一个类:
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>());