interface IVehicle
{
void DoSth();
}
class VW : IVehicle
{
public virtual void DoSth() { ... }
}
class Golf : VW { }
class Lupo : VW
{
public override void DoSth()
{
base.DoSth();
...
}
}
en mi código tengo:es operador en la lista genérica
List<VW> myCars = new List<VW>();
myCars.Add(new Golf());
myCars.Add(new Lupo());
ahora quiero evaluar si tengo una lista de vehículos. algo como:
if(myCars is List<IVehicle>)
{
foreach(IVehicle v in myCars)
v.DoSth();
}
¿cómo puedo hacer esto? el operador-is en la lista genérica no funciona. ¿Hay otra manera?
Comprobación para ver si una lista de objetos 'VW' es una lista de objetos' IVehicle' parece tonto, ya que 'VW' hereda de' IVehicle' y, por lo tanto, estás escribiendo 'if (true)'. Además, dado que 'VW' hereda de' IVehicle' y 'myCars' es una' List ',' foreach (IVehicle v en myCars) 'simplemente funcionará. –
Steven
@Steven: una lista de VW es enfáticamente * no * una lista de IVehicle, porque puede agregar un Ford a una lista de IVehicle, pero no a una lista de VW. – phoog
Sí, pero simplemente está iterando esa lista, lo cual es seguro. – Steven