我正在尝试使用Union从几个对象列表中创建所有对象的列表。
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)
的结果?
答案 0 :(得分: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)
如果你需要以特定顺序发生联合,你可以搞砸它 - 我没有打扰,因为Union本来就是一个集合操作。