gpt4 book ai didi

c# - 如何获取继承自公共(public)类的两组对象的并集

转载 作者:行者123 更新时间:2023-12-02 17:31:30 25 4
gpt4 key购买 nike

假设我有两个类,Plane 和 Car,它们都继承自 Vehicle

public class Vehicle
{
}

public class Car : Vehicle
{
}

public class Plane : Vehicle
{
}

如何获取飞机列表和汽车列表并将它们合并为单个车辆列表?我尝试了以下操作,但汽车上出现错误,表示最佳过载必须采用 IEnumerable 类型的接收器

List<Vehicle> vehicles = cars.Union(planes);

是否有比使用两个 .Select 循环将所有对象转换为车辆更简单的方法?

最佳答案

您需要将枚举转换为公共(public)基类型:

var vehicles = cars.Cast<Vehcile>().Union(planes);

原因是Union的签名如下:

Union<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second)

在您的代码中,形式 first编译器推断 TSourceCar ,因此 second类型错误; IEnumerable<Plane>而不是预期的 IEnumerable<Car> .

请记住,在类型推断中,如果推断出错,编译器不会回溯并尝试其他操作,也就是说,它不会执行以下操作:

  1. firstIEnumerable<Car> ,所以TSource 可能 Car .
  2. second不是IEnumerable<Car> ,所以TSource不能Car .
  3. 有没有通用类型TSource这样 IEnumerable<Car>IEnumerable<Plane>可以隐式转换为IEnumerable<TSource> ?是的,Vehicle ,因此TSourceVehicle .

关于c# - 如何获取继承自公共(public)类的两组对象的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com