0

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

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

Opel CarOpel = new Opel(parameters);

ETC...

List<Car> Cars = new List<Car>();
Car.Add(CarOpel);

ETC...

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

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

?

4

3 回答 3

8
var opelCars = cars.OfType<Opel>()


foreach ( Opel car in cars.OfType<Opel>())
{
}

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

foreach ( Car car in cars)
{
    if(car is Opel) 
    {
        var opel = (Opel)car;
    }
}

如果您需要降低您的汽车以做某事,这可能表明您的继承层次结构错误或您的方法不在正确的位置。它可能应该是Car在派生类中被覆盖的类中的虚拟方法。还可以考虑阅读有关访问者模式的信息。

于 2012-12-27T16:59:56.743 回答
3

您必须将其转换为特定类型。

foreach(Car car in Cars) 
{ 
    CarOpel opel = car as CarOpel;

    if (opel != null)
    {
        //do something with Opel
    }
}
于 2012-12-27T17:00:28.797 回答
1

使用isas运算符。

foreach ( Car car in Cars )
{

  if (car is Opel)
  {
   // do opel operation
    var op = (Opel)car;
  }

  if (car is Volkswagen)
  {
   // do VW operation
    var vw = (Volkswagen)car;
  }
}
于 2012-12-27T17:01:00.597 回答