2011-04-05 68 views
0

我想創建一個清單,從我使用聯盟的幾個對象列表中的所有對象。LINQ聯盟對象具有相同的基類

Return Chart.AnnotativeNodes.Union(_ 
     Chart.DecisionNodes.Union(_ 
      Chart.EndNodes.Union(_ 
      Chart.StartNodes.Union(Chart.WorkCenterNodes)))) 

上面一行得到一個錯誤,因爲我不能工會List(of AnnotativeNode)List(of DecisionNode)。每個列表定義爲List(of EndNode)List(of StartNode),但每個類都繼承自基類型節點。

有沒有可能的方法來結合這些來得到IEnumerable(of Node)的結果?

回答

1

如果您使用.NET 4,你應該能夠做到這一點是這樣的:

Return Chart.AnnotativeNodes.Union(Of Node) _ 
      (Chart.DecisionNodes.Union(Of Node) _ 
       (Chart.EndNodes.Union(Of Node) _ 
        (Chart.StartNodes.Union(Of Node)(Chart.WorkCenterNodes)))) 

這應該在.NET 4,由於工作,以通用協方差否則,你可能只是調用Cast(Of Node)上每個集合。

我懷疑你的代碼可以更可讀,雖然寫的,如:

Return Chart.AnnotativeNodes.Union(Of Node)(Chart.DecisionNodes) _ 
          .Union(Of Node)(Chart.EndNodes) _ 
          .Union(Of Node)(Chart.StartNodes) _ 
          .Union(Of Node)(Chart.WorkCenterNodes) 

如果需要工會-ING在一個特定的順序發生,你可以亂用它 - 我沒有困擾,因爲聯盟本來就是一個固定的行動。