0xD*_*EEF 7 .net c# generics inheritance list
interface IVehicle
{
void DoSth();
}
class VW : IVehicle
{
public virtual void DoSth() { ... }
}
class Golf : VW { }
class Lupo : VW
{
public override void DoSth()
{
base.DoSth();
...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的代码我有:
List<VW> myCars = new List<VW>();
myCars.Add(new Golf());
myCars.Add(new Lupo());
Run Code Online (Sandbox Code Playgroud)
现在我想评估我是否有车辆清单.就像是:
if(myCars is List<IVehicle>)
{
foreach(IVehicle v in myCars)
v.DoSth();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?通用列表中的is-operator不起作用.有另一种方式吗?
Mar*_*ell 11
即使使用4.0方差规则,即使VW是IVehicle,大众列表也不会是IVehicle列表.这不是方差的工作原理.
但是,在4.0中,您可以使用:
var vehicles = myCars as IEnumerable<IVehicle>;
if(vehicles != null) {
foreach(var vehicle in vehicles) {...}
}
Run Code Online (Sandbox Code Playgroud)
由于IEnumerable<out T>展品协方差.