gpt4 book ai didi

c# - 具有相同基类的泛型的泛型列表

转载 作者:行者123 更新时间:2023-12-04 07:50:13 24 4
gpt4 key购买 nike

我正在尝试实现一个泛型对象的泛型列表,其中列表中泛型对象的类型具有相同的基类。
一个简化的场景是:
我想要一个有车辆区域的车库。一个区域有汽车,另一个区域有自行车。
这是一个小例子:

    public class MyGarage
{
public List<Area<Vehicle>> Create()
{
var vehicles = new List<Vehicle> { new Car(), new Bike() };
var carArea = new Area<Car> { Vehicles = new List<Car>() };
var bikeArea = new Area<Bike> { Vehicles = new List<Bike>() };
var garage = new List<Area<Vehicle>>();

// Not working - can't convert from Area<Car> to Area<Vehicle>
garage.Add(carArea);
garage.Add(bikeArea);

return garage;
}

public void DoSomething()
{
var garage = Create();

var area = garage.FirstOrDefault();
if (area is Area<Car>)
{
// do something car related
}
else if (area is Area<Bike>)
{
// do something bike related
}
}
}

public abstract class Vehicle { }
public class Car : Vehicle { }
public class Bike : Vehicle { }

public class Area<T> where T : Vehicle
{
public IEnumerable<T> Vehicles { get; set; }
}
知道为什么这是不可能的或者我错过了什么吗?

最佳答案

改变

var carArea = new Area<Car> { Vehicles = new List<Car>() };
var bikeArea = new Area<Bike> { Vehicles = new List<Bike>() };
var carArea = new Area<Vehicle> { Vehicles = new List<Car>() };
var bikeArea = new Area<Vehicle> { Vehicles = new List<Bike>() };
现在您的 carAreabikeAreaArea<Vehicle> (您的车库期望)并且每个都有自己的相关车辆,这将在您的方法中起作用。
并获取列表中的车辆类型:
if(area.GetType() == typeof(List<Car>))
{

}

关于c# - 具有相同基类的泛型的泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67024312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com