2010-12-02 111 views
0

我有一個程序,有一個超級車輛,並有3個類繼承它汽車,卡車,小巴我需要採取類的實例,並顯示它們在我的主窗體'FrmHire'上的列表框中我爲此,有一個叫做艦隊的班級。不能隱式轉換類型

我不斷收到此錯誤,

不能鍵入App1.Vehicle隱式轉換爲App1.Car。一個顯式轉換存在(是否缺少強制轉換?)

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

你可以指向拋出一個錯誤的行? – 2014-12-17 20:19:14

回答

1

鑑於您的列表可能包含汽車,卡車和小轎車,你可以假設你可以採取的ElementAt(指數),並將其轉換爲租車, 你可以嗎?

假設你從ElementAt(索引)獲得一輛車,並且如果你知道它將是一輛車,那麼你可以明確地將它投射到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

第一個工作,但在列表框中,它拋出的解決方案的名稱然後a。然後汽車,而不是汽車:?有任何想法嗎? – bettsy583 2010-12-02 21:23:08

0

myFleet.fleet的類型是什麼?我懷疑這是一輛車的集合,你正試圖將一輛車分配給一輛車。

+0

是的,沒錯! – bettsy583 2010-12-02 21:21:18

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

如果myFleet.fleet.ElementAt(index);不是Car這會拋出異常。要檢查它是否爲Car,您可以執行if (myFleet.fleet.ElementAt(index) is Car) {...}。但最好是使用List<Car>而不是List<Vehicle>,如果你只打算將汽車存儲在其中。

+0

這可能會拋出。我更喜歡myFleet.fleet.ElementAt(index)作爲Car,所以我可以檢查myCar爲null。 – n8wrl 2010-12-02 21:18:18

+0

@ n8wrl,我注意到在我的編輯。 – 2010-12-02 21:20:07

0

試試這個:

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