2010-12-02 11 views
0

私はスーパークラスの車両を持ち、それを継承する3つのクラスを持っています車、トラック、ミニバスクラスのインスタンスを取って、メインフォーム 'FrmHire'のリストボックスに表示する必要がありますこれのためにフリートと呼ばれるクラスを持っています。暗黙的にタイプを変換することはできません

私はこのエラーを取得し、

が暗黙のうちにApp1.Carに型App1.Vehicleを変換できません保ちます。明示的な変換は、(あなたがキャストが欠けている?)あなたのリストには車が含まれているかもしれないことを考えると

private void lstFleet_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     /* 
     * This method is used to control the list box 
     * It is called when a row is selected by the user, it then displays frmCar 
     * with the car details 
     */ 
     if (lstFleet.SelectedIndex > -1) 
     { 
      int index = lstFleet.SelectedIndex; 
      Car myCar = myFleet.fleet.ElementAt(index); 
      FrmCar carGui = new FrmCar(); 
      carGui.car = myCar; 
      carGui.Show(); 
     } 
    } 
+0

は、あなたがエラーをスローラインを指すことはできますか? –

答えて

1

、トラックやMinibusses存在し、あなたがElementAt(インデックス)を取ることができることを前提とし、車にキャストすることができます、 あなたはできる?

おそらく、ElementAt(インデックス)からVehicleが返ってきて、それが車であることが分かっている場合、Carに明示的にキャストできますが、ここで暗黙のキャストがこの問題の原因です。

だから、あなたのいずれかが必要...

Car myCar = (Car)myFleet.fleet.ElementAt(index); 

を(あなたは彼らがすべての車のインスタンスをしていると何かが例外であることを確認するために知っていれば)...またはあなたにこれに対処する必要があります車両...その後

Vehicle myVehicle = myFleet.fleet.ElementAt(index); 

アイテムが車であるかどうかをテスト(やない場合は、別の何かを)したい場合は、この...

Car myCar = myFleet.fleet.ElementAt(index) as Car; 
if (myCar != null) 
{ 
    // it was a car 
} 
+0

最初のものは動作しますが、リストボックスではソリューションの名前にスローし、Carではなく。何か案は? – bettsy583

0

myFleet.fleetのタイプは何ですか?私はそれがVehicle'sのコレクションだと思うし、あなたはCarに1つ割り当てようとしている。

+0

はい、そうです! – bettsy583

0
Car myCar = (Car)myFleet.fleet.ElementAt(index); 

myFleet.fleet.ElementAt(index);Carでない場合、これは例外をスローします。 Carであることを確認するには、if (myFleet.fleet.ElementAt(index) is Car) {...}を実行してください。しかし、最高ののは、List<Vehicle>の代わりにList<Car>を使用することです。

+0

これは投げるかもしれません。 myFleet.fleet.ElementAt(index)をCarとして使用したいので、myCarでnullをチェックできます。 – n8wrl

+0

@ n8wrl、私は編集でそれを指摘しました。 –

+0

こんにちは、エラーを削除しましたが、私のテキストボックスに 'WindowsApplication1.Car' aposeと 'Car'があります:これは何をすべきですか? – bettsy583

0

これを試してみてください:

Car myCar = (Car)myFleet.fleet.ElementAt(index); 
+0

これは動作しますが、ソリューションの名前が表示され、リストボックスに表示されます..... – bettsy583

関連する問題