转换为列表中的特定类型

San*_*zar 0 .net c# foreach types list

因此,假设我们有一个名为Car的类和其他三个类(Opel,Volkswagen和Peugeot)继承Car的信息,但每个类都有一个特定的变量.

所以我创建了一个新的汽车列表,我在其中添加了这三种类型的CarOpel..etc.

Opel CarOpel = new Opel(parameters);
Run Code Online (Sandbox Code Playgroud)

等等...

List<Car> Cars = new List<Car>();
Car.Add(CarOpel);
Run Code Online (Sandbox Code Playgroud)

等等...

当我使用"foreach"语句时,如何从每个类访问这些特定变量

foreach ( Car car in Cars )
{
      // how to convert *car* in *Opel* , *Volkswagen* or *Peugeot* to get that specific variable?
}
Run Code Online (Sandbox Code Playgroud)

Jak*_*cki 8

var opelCars = cars.OfType<Opel>()


foreach ( Opel car in cars.OfType<Opel>())
{
}
Run Code Online (Sandbox Code Playgroud)

其他解决方案是使用is关键字

foreach ( Car car in cars)
{
    if(car is Opel) 
    {
        var opel = (Opel)car;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要向下投影汽车以便做某事,可能会表明您的继承层次结构错误或您的方法不在适当的位置.它可能应该是Car类中的虚方法,它在派生类中被重写.还要考虑阅读访客模式.