Mat*_*eld 5 generics ienumerable inheritance covariance c#-3.0
比方说,我有一个班级:
public class MyFoo : IMyBar
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我想使用以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
但这会产生错误:
`Argument '1': cannot convert from 'IEnumerable<MyFoo>' to 'IEnumerable<IMyBar>'
Run Code Online (Sandbox Code Playgroud)
为什么是这样?由于MyFoo实现了IMyBar,人们可以预期IEnumerable的MyFoo可以被视为IMyBar的IEnumerable.一个平凡的现实世界的例子是生产汽车列表,然后被告知它不是车辆列表.
这只是一个小小的烦恼,但如果有人能够对此有所了解,我会非常感激.
Meh*_*ari 14
这将在C#4.0中运行!你所说的是通用协方差.
在此期间,您可以使用Cast
扩展方法:
List<IMyBar> interfaceList = new List<IMyBar>(classList.Cast<IMyBar>());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
573 次 |
最近记录: |