无法隐式转换类型

时间:2010-12-02 21:13:38

标签: c# .net

我有一个程序,它有一个超类车辆,有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();
        }
    }

4 个答案:

答案 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);