LINQ Union объекты с одинаковым базовым классом - PullRequest
0 голосов
/ 05 апреля 2011

Я пытаюсь создать список всех своих объектов из нескольких списков объектов, используя 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)?

1 Ответ

1 голос
/ 05 апреля 2011

Если вы используете .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 изначально предназначен для операции с сетами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...