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

leo*_*ora 1 c# collections casting

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

  IEnumerable<IVehicle> allVehicles = GetAllVehicles();
Run Code Online (Sandbox Code Playgroud)

我知道所有这些对象都是Car对象.什么是正确的投射方式

IEnumerable<IVehicle>
Run Code Online (Sandbox Code Playgroud)

IEnumerable<Car>
Run Code Online (Sandbox Code Playgroud)

因为我需要将这些传递给另一个需要的功能 <Enumerable<Car>

us3*_*s3r 6

你可以这样投:

var allCars = allVehicles.Cast<Car>();
Run Code Online (Sandbox Code Playgroud)


Cod*_*dor 5

我不确定这实际上是否需要,但可以使用Linq扩展方法完成,如下所示.

IEnumerable<Car> Cars = allVehicles.Cast<Car>();
Run Code Online (Sandbox Code Playgroud)

然而,如果在成员之一,这将抛出一个异常allVehicles不是一个Car; 如果需要,可以如下规避这一点.

IEnumerable<Car> Cars = allVehicles.OfType<Car>().Cast<Car>();
Run Code Online (Sandbox Code Playgroud)

  • 你不需要在`OfType`的结果上调用`Cast` (2认同)