假设我有两个类,Plane和Car,它们都继承自Vehicle
public class Vehicle
{
}
public class Car : Vehicle
{
}
public class Plane : Vehicle
{
}
Run Code Online (Sandbox Code Playgroud)
如何获取飞机列表和汽车列表并将它们合并为一个车辆列表?我尝试了下面这个,但是在汽车上有一个错误,说最好的重载必须采用IEnumerable类型的接收器
List<Vehicle> vehicles = cars.Union(planes);
Run Code Online (Sandbox Code Playgroud)
有没有比使用两个.Select循环将所有对象强制转换为Vehicle更简单的方法?
您需要将枚举强制转换为公共基类型:
var vehicles = cars.Cast<Vehcile>().Union(planes);
Run Code Online (Sandbox Code Playgroud)
bieng Union签名的原因如下:
Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)
Run Code Online (Sandbox Code Playgroud)
在你的代码,形成first编译器的原因指出TSource的Car,因此second有错误的类型; IEnumerable<Plane>而不是预期的IEnumerable<Car>.
请记住,在类型推断中,如果推理出错,编译器将不会进行bactrack并尝试其他操作,也就是说,它不会执行以下操作:
first是的IEnumerable<Car>,TSource 也可能 Car.second是不是IEnumerable<Car>,所以TSource不可能Car.TSource,这样既IEnumerable<Car>和IEnumerable<Plane>可隐式转换为IEnumerable<TSource>?是的Vehicle,因此TSource是Vehicle.| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |