c# - 是否可以创建一个可以添加两个不同类的列表?
问题描述
我试图在一个数组列表中添加两个类(汽车和货车),但似乎该列表是由第一个类(汽车)定义的,并且在尝试添加另一个类(货车)时出现运行时错误
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# 课程,所以我不是那么先进 :)
解决方案
不要使用ArrayList
,使用泛型List<T>
,只要两个类都继承自同一个基类,你就可以这样做。多态性。
创建一个新的List<BaseClass>
. 我们假设Car
并Van
继承自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
}
}
推荐阅读
- javascript - 如何在渲染时验证特定的 formik 字段
- javascript - 如何“阅读更多 - 仅在文本溢出时阅读更少(否则隐藏阅读更多)”
- django - 带排序的 DRF 分页
- wordpress - 有什么方法可以为 PDF 使用 Wordpress 重定向插件吗?
- sql-server - 如何在 SQL Server Management Studio 中使用连接字符串关键字连接到本地 SQL Server?
- kubernetes - “kubectl rollout restart deploy”会导致停机吗?
- django - Django - 为每个 M2M 字段选择项目
- dataweave - 在 Dataweave 2.0 中添加默认命名空间的其他方法?
- r - r中的Highcharter Maps,如何通过数据中的变量使地图点变暗
- excel - 嵌套 IF & Do Until 循环 | VBA