我有一个程序,它有一个超类车辆,有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 :(得分:1)
鉴于您的列表可能包含汽车,卡车或小巴,您可以假设您可以使用ElementAt(索引)并将其投射到汽车,是吗?
大概你从ElementAt(索引)回来一辆车,如果你知道它将是一辆汽车,那么你可以明确地将它投射到Car,但你在这里的隐式演员是造成这个问题的。
所以,你需要(如果你确定他们都是Car实例,其他任何东西都是例外)......
Car myCar = (Car)myFleet.fleet.ElementAt(index);
...或者您需要将其作为车辆处理......
Vehicle myVehicle = myFleet.fleet.ElementAt(index);
如果你想测试这个项目是否是Car(如果不是,那就做一些不同的事情),那么......
Car myCar = myFleet.fleet.ElementAt(index) as Car;
if (myCar != null)
{
// it was a car
}
答案 1 :(得分:0)
myFleet.fleet的类型是什么?我怀疑它是车辆的集合,你正在尝试将其分配给一辆车。
答案 2 :(得分: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>
,如果您只是将汽车存放在其中。
答案 3 :(得分:0)
试试这个:
Car myCar = (Car)myFleet.fleet.ElementAt(index);