2012-12-07 3 views
3

이 인터페이스를 만들어 두 개의 다른 콜렉션에 대한 결합 된 콜렉션으로 사용합니다.공통 인터페이스로 다른 유형의 2 개의 IEnumerable을 결합합니다.

내 개체 (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) 
+0

목적은 무엇입니까 ?? 나는 그것이 가능하다고 생각하지 않는다. – Daniel

+0

어떤 필드가 동일하지 않습니까? 클래스가 인터페이스를 구현하면 두 클래스가있는 인터페이스의 Enumerable을 만들 수 있습니다. – Paparazzi

+0

그럼 두 개의 다른 IEnumerable을 하나로 결합하려고합니다 ... – SkyeBoniwell

답변

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})); 
+0

+1, 나는 그것이 잘 될지 모르겠다. 그러나 그것이 할 것 같다. –

3

당신은, 그러나 당신이 하나 개의 모음으로 2 개 별도의 유형을 결합하려고을 (:) downvote하기 전에 반드시 읽어주세요) 그들은 모두 같은 기본 클래스에서 상속 않는 한 당신이 할 수없는 Concat 방법을 사용할 수 있습니다 Concat.

Vehicle이라는 기본 클래스를 만든 다음이 클래스에서 ourCarsourTrucks을 유도하는 것이 좋습니다.

그렇지 않으면 Select 메서드를 사용하여 두 컬렉션을 모두 같은 유형으로 변환해야합니다.

C 번호 : 모든

combinedResults = cars.Concat(trucks); 
+3

-1. 나는 downvoting하기 전에 읽지 못했다 : P –

+0

나는 대부분의 사람들이 코드를보고 분명히 이것은 직접적인 대답이 아니므로 대부분의 사람들은 단지 downvote 할 것이다. –

+0

예 ... 이것은 내가 생각한 것입니다 ... 내가 원하는 필드를 선택하는 것과 같은 선택 방법을 사용해야합니다. 나는 이것을 시작하려고했지만 실패했다 : ( – SkyeBoniwell

5

첫째, 당신은 모두 당신의 ourCarsourTrucks 유형 새로운 carTruckCombo 유형 구현 있는지 확인해야합니다. 완료되면 다음과 같은 코드를 사용할 수 있습니다.

Dim combinedResults = cars.Cast(Of carTruckCombo).Concat(trucks.Cast(Of carTruckCombo)) 
관련 문제