我有几个课程:
class Vehicle
{
}
class Car : Vehicle
{
}我有一个派生类的列表:IList<Car> cars;
我想将列表转换为它的基类,并且已经尝试过了:IList<Vehicle> baseList = cars as IList<Vehicle>;
但我总是得到null。也是
cars is IList<Vehicle> evaluates to be false.当然,如果我执行以下操作,我可以将这些项目添加到列表中:
List<Vehicle> test = new List<Vehicle> ();
foreach ( Car car in cars )
{
test.Add(car);
}我得到了我的清单,但我知道一定有更好的方法。有什么想法吗?
发布于 2009-09-21 22:46:41
使用IEnumerable.Cast:
IList<Vehicle> vehicles = cars.Cast<Vehicle>().ToList();或者,您也可以避免转换为列表,这取决于您希望如何处理源汽车列表。
发布于 2009-09-21 22:47:20
那种允许将IList<Car>转换为IList<Vehicle>的多态性是不安全的,因为它会让您在IList<Car>中插入Truck。
发布于 2009-09-22 07:02:15
您面临的问题是C#中存在有限的协方差和逆方差。在here at the very ending描述的C# 4.0中有一种有趣的方法。然而,它创造了一些与Novelocrat答案中的卡车问题相关的其他限制。
https://stackoverflow.com/questions/1457265
复制相似问题