首页 > 解决方案 > 是否可以创建一个可以添加两个不同类的列表?

问题描述

我试图在一个数组列表中添加两个类(汽车和货车),但似乎该列表是由第一个类(汽车)定义的,并且在尝试添加另一个类(货车)时出现运行时错误

System.InvalidCastException:'无法将'CarBroker.Car'类型的对象转换为'CarBroker.Van'类型。

我相信该错误是由在创建“Car”类型的第一个条目时定义的arraylist 引起的,并且在尝试添加不同类型的“Van”时会发生错误。

是否有另一个列表可以代替?

public class List // Global ArrayList to store car data
{ public static ArrayList vehicle = new ArrayList(); }
static void Main(string[] args)
{
    Car car = new Car();
    car.SetVehicleData();
    car.SetOwnerData();

    List.vehicle.Add(car);

    Van van = new Van();
    van.SetVehicleData();
    van.SetCompanyData();

    List.vehicle.Add(van);

    Admin a1 = new Admin();
    a1.ListAll();

    Console.ReadKey();

}

运行我的 ListAll() 方法时,理想的输出将是具有“car”类的第一个列表条目和具有“van”类的第二个条目

相反,我得到了上面提到的错误。

任何人都可以帮助我使用正确的列表或其他功能吗?我正在参加一个基本的 C# 课程,所以我不是那么先进 :)

标签: c#

解决方案


不要使用ArrayList,使用泛型List<T>,只要两个类都继承自同一个基类,你就可以这样做。多态性。

创建一个新的List<BaseClass>. 我们假设CarVan继承自BaseClass. 然后

List.Add(Car)
List.Add(Van)

当您遍历列表时,您必须测试对象。例如:

  foreach (Vehicle vehicle in List) 
  { 
        if (vehicle is Car car) 
        { 
            car.customProp 
        } 
        if (vehicle is Van van) 
        { 
           van.VanCustomProp 
        } 
   } 

推荐阅读