C# 如何获得从公共类继承的两组对象的并集
假设我有两个类,Plane和Car,它们都继承自VehicleC# 如何获得从公共类继承的两组对象的并集,c#,linq,union,C#,Linq,Union,假设我有两个类,Plane和Car,它们都继承自Vehicle public class Vehicle { } public class Car : Vehicle { } public class Plane : Vehicle { } 如何获取飞机列表和汽车列表,并将它们合并为一个车辆列表?我尝试了以下方法,但在汽车上出现了一个错误,即最好的过载必须采用IEnumerable类型的接收器 List<Vehicle> vehicles = cars.Union(planes
public class Vehicle
{
}
public class Car : Vehicle
{
}
public class Plane : Vehicle
{
}
如何获取飞机列表和汽车列表,并将它们合并为一个车辆列表?我尝试了以下方法,但在汽车上出现了一个错误,即最好的过载必须采用IEnumerable类型的接收器
List<Vehicle> vehicles = cars.Union(planes);
列出车辆=汽车.联合体(飞机);
有没有比使用两个更简单的方法。选择“循环”将所有对象强制转换为车辆?您需要将枚举强制转换为公共基类型:
var vehicles = cars.Cast<Vehcile>().Union(planes);
在您的代码中,表单first
编译器推断出TSource
是Car
,因此second
的类型错误IEnumerable
而不是预期的IEnumerable
请记住,在类型推理中,如果推理出错,编译器不会跟踪并尝试其他操作,也就是说,它不会执行以下操作:
first
是IEnumerable
,因此TSource
可能是Car
second
不是IEnumerable
,因此TSource
不能是Car
TSource
,以便IEnumerable
和IEnumerable
都可以隐式转换为IEnumerable
?是,Vehicle
,因此TSource
是Vehicle
次要旁注:由于汽车不可能是飞机,因此您可以使用
Concat
而不是Union
(除非列表本身应“不同”)
Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)