C# 在C语言中,将接口列表强制转换为对象列表的推荐方法是什么?

C# 在C语言中,将接口列表强制转换为对象列表的推荐方法是什么?,c#,collections,casting,C#,Collections,Casting,我有返回IVehile接口和数组的代码 IEnumerable<IVehicle> allVehicles = GetAllVehicles(); 我知道所有这些物体都是汽车物体。正确的投法是什么 IEnumerable<IVehicle> 到 由于我需要将这些函数传递到另一个需要的函数中,您可以像这样强制转换它: var allCars = allVehicles.Cast<Car>(); 你可以这样施展: var allCars = allVeh

我有返回IVehile接口和数组的代码

  IEnumerable<IVehicle> allVehicles = GetAllVehicles();
我知道所有这些物体都是汽车物体。正确的投法是什么

IEnumerable<IVehicle>


由于我需要将这些函数传递到另一个需要的函数中,您可以像这样强制转换它:

var allCars = allVehicles.Cast<Car>();

你可以这样施展:

var allCars = allVehicles.Cast<Car>();

我不确定这是否真的是需要的,但可以使用Linq扩展方法来实现,如下所示

IEnumerable<Car> Cars = allVehicles.Cast<Car>();
IEnumerable<Car> Cars = allVehicles.OfType<Car>().Cast<Car>();

我不确定这是否真的是需要的,但可以使用Linq扩展方法来实现,如下所示

IEnumerable<Car> Cars = allVehicles.Cast<Car>();
IEnumerable<Car> Cars = allVehicles.OfType<Car>().Cast<Car>();

可能重复-查看OfType和Cast可能重复-查看OfType和Cast您不需要对的结果调用CastOfType@JonHanna谢谢你的评论,我没有意识到这一点。你不需要给演员打电话了解比赛结果OfType@JonHanna谢谢你的评论,我没有意识到这一点。值得注意的是,这是可能的,因为IEnumerable的协方差,所有车辆实际上已经是IEnumerable了。Cast考虑将整个操作优化为单个Cast的机会,这意味着。这根本不是对集合进行Cast。它正在创建一个全新的集合,基于其中的项目铸造。这是完全不同的。值得注意的是,这是可能的,因为IEnumerable的协方差,所有的交通工具实际上已经是IEnumerable了。Cast考虑将整个操作优化为单个Cast的机会,这意味着。这根本不是对集合进行Cast。它正在创建一个全新的集合,基于其中的项目铸造。那完全不同。