0

たとえば、Carという名前のクラスと、Carから情報を継承する他の3つのクラス(Opel、Volkswagen、Peugeot)がありますが、さらに各クラスには特定の変数があります。

そこで、これら3つのタイプのCarOpel..etcを追加した新しい車のリストを作成します。

Opel CarOpel = new Opel(parameters);

等...

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

等...

「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

isまたはas演算子を使用します。

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 に答える