将2个不同类型的IEnumebles与通用接口相结合

时间:2012-12-07 20:06:31

标签: .net vb.net

我已创建此界面,以用作其他2个集合的组合集合。

我的两个对象(ourCarsourTrucks)都包含有关我的汽车收藏和卡车收集的信息。

但是字段不一样,我想创建一个新的集合,将两者结合起来。

Private Interface carTruckCombo
    Property ID As String  
    Property make As String 
    Property model As String 
End Interface

Dim cars As IEnumerable(Of ourCars) = Enumerable.Empty(Of ourCars)()
Dim trucks As IEnumerable(Of ourTrucks) = Enumerable.Empty(Of ourTrucks)()

现在这就是我被困的地方......我现在该怎么做?

Dim combinedResults As IEnumerable(Of carTruckCombo)

3 个答案:

答案 0 :(得分:5)

首先,您需要确保ourCarsourTrucks类型实施新的carTruckCombo类型。完成后,您可以使用以下代码:

Dim combinedResults = cars.Cast(Of carTruckCombo).Concat(trucks.Cast(Of carTruckCombo))

答案 1 :(得分:4)

var combinedResults  = 
    cars.Select(c=>new carTruckCombo{ID=c.ID,make=c.make,model=c.model})
    .Union(tracks.Select(t=>new carTruckCombo{ID=t.ID,make=t.make,model=t.model}));

答案 2 :(得分:3)

你可以使用Concat方法, HOWEVER(请在downvote之前阅读:) 你试图将2个单独的类型组合成一个集合,除非它们都从同一个基础继承那么你不能做Concat。

您可以考虑创建一个名为Vehicle的基类,然后从此类派生ourCarsourTrucks

否则,您必须使用Select方法将两个集合转换为相同的类型。

C#:

combinedResults =  cars.Concat(trucks);