【发布时间】:2011-01-30 13:17:06
【问题描述】:
比如说,我有一个班级:
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。一个平凡的现实世界示例正在生成汽车列表,然后被告知这不是车辆列表。
这只是一个小烦恼,但如果有人能对此有所了解,我将不胜感激。
【问题讨论】:
-
这个问题也涵盖了你想要的答案:stackoverflow.com/questions/2346763/…
-
是的,谢谢 - 我在发布问题后在“相关”列表中看到了它,但在我写它的时候它没有出现......
标签: generics inheritance c#-3.0 ienumerable covariance