说,例如,我有一个类:

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

09-30 00:15