具有相同基类的 LINQ Union 对象
我正在尝试使用 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)
,但每个类都继承自基类型 Node。
有没有可能的方法将它们联合起来以获得 IEnumerable(of Node)
的结果?
I'm trying to create a list of all my objects from several lists of objects using Union.
Return Chart.AnnotativeNodes.Union( _
Chart.DecisionNodes.Union( _
Chart.EndNodes.Union( _
Chart.StartNodes.Union(Chart.WorkCenterNodes))))
The above line gets an error because I can't union List(of AnnotativeNode)
with List(of DecisionNode)
. Each list defined like List(of EndNode)
or List(of StartNode)
, but each class inherits from the base type Node.
Is there a possible way to union these to get a result of IEnumerable(of Node)
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您使用的是 .NET 4,您应该能够这样做:
由于 .NET 4 中的通用协方差,这应该可以工作。否则,您可以只调用
Cast(Of Node)
每个集合。我怀疑你的代码可以写得更具可读性,因为:
如果你需要以特定顺序进行联合,你可以搞乱它 - 我没有打扰,因为联合意味着首先是集合运算。
If you're using .NET 4, you should be able to do it like this:
That should work due to generic covariance in .NET 4. Otherwise, you could just call
Cast(Of Node)
on each of the collections.I suspect your code can be written more readably though, as:
If you need the union-ing to happen in a particular order, you can mess with it - I haven't bothered, as Union is meant to be a set operation in the first place.