【问题标题】:Merge and order 2 lists of different objects in VB.net?在 VB.net 中合并和排序 2 个不同对象的列表?
【发布时间】:2012-03-15 20:11:59
【问题描述】:

我有 2 种不同类型的集合 - 我们称它们为汽车和卡车。两者共享基类 Vehicle,该类具有属性 Passengers。

我想将它们合并到按该属性排序的单个集合中。例如,合并汽车和卡车并按乘客订购。

我应该怎么做?

【问题讨论】:

  • 我考虑将 Cars 和 Trucks 转换回 Vehicles,按乘客订购 Vehicles,然后 TryCast() 每个 Vehicle 转换为 Car 或 Truck。但这似乎很笨拙。

标签: vb.net linq list


【解决方案1】:

您可以使用Concat Linq 方法来组合两个列表。

Dim vehicles = cars.cast(Of Vehicle)().Concat(trucks.cast(Of Vehicle)())
Dim orderedVehicles = vehicles.OrderBy(Function(v) v.Passengers).ToList()

【讨论】:

    【解决方案2】:

    如果您可以使用 LINQ 并且正在使用 .NET 4,那就很简单了:

    Dim vehicles List<Vehicle> vehicles = _
        cars.Concat(Of Vehicle)(trucks).OrderBy(Function(x) x.Passsengers).ToList()
    

    如果您不使用 .NET 4(因此无法利用泛型协方差),则需要使用 Cast

    Dim vehicles = cars.Cast(Of Vehicle)() _
                       .Concat(trucks.Cast(Of Vehicle)) _
                       .OrderBy(Function(x) x.Passsengers) _
                       .ToList()
    

    (为暂时的 C#-isms 道歉。)

    ...如果您不使用 .NET 3.5,它会变得稍微痛苦一些。 (可行,但很混乱。)

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 2011-05-17
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 2015-04-04
      • 2021-09-10
      相关资源
      最近更新 更多