具有相同基类的 LINQ Union 对象

发布于 2024-10-29 21:50:44 字数 500 浏览 1 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2024-11-05 21:50:44

如果您使用的是 .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)

如果你需要以特定顺序进行联合,你可以搞乱它 - 我没有打扰,因为联合意味着首先是集合运算。

If you're using .NET 4, you should be able to do it like this:

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

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:

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文