Прочитав MSDN Как: документ по использованию parallel.foreach () Я подумал, что смогу разбавить некоторые длительные части моего кода, - однако Visual Studio производит сообщение об ошибке, которое я борюсь понять, и я больше не уверен, что XmlNodeList - System.Collections.IEnumerable или нет!

Мой код:

Parallel.ForEach(Doc.GetElementsByTagName("Details2"), Sub(Node As XmlNode)
      'do something, for instance
      For Each tAttribute As XmlAttribute In Nodede.Attributes
          debug.writeline(tAttribute.value)
      next
   End Sub)

Я тогда получаю сообщение об ошибке:

Ошибка BC30518 Разрешение перегрузки не удалось, потому что никаких доступных «foreach» можно вызвать с этими аргументами: «Общие общие перегрузки Функция Foreach (of tsource) (Источник в виде IENumerable (TSource), Тело как действие (of tsource)), как Parallelloopresult ': данные Тип (ы) типового параметра (ы) не могут быть выведены из этих аргументов. Указание типа данных (ы) явно может исправить эту ошибку.

Где я ошибаюсь?

-1
Martin KS 26 Сен 2019 в 18:40

1 ответ

Лучший ответ

XmlNodeList класс делает реализует IEnumerable интерфейс. Однако Parallel.ForEach ожидает параметр IEnumerable(Of T) (или в этом случае IEnumerable(Of XmlNode)). Следовательно, разрешение перегрузки не удается. Вам нужно отличить объект XmlNodeList к IEnumerable(Of XmlNode).

Попробуйте что-то вроде этого:

Parallel.ForEach(doc.GetElementsByTagName("Details2").OfType(Of XmlNode),
                 Sub(node As XmlNode)
                     'do something, for instance
                     For Each tAttribute As XmlAttribute In node.Attributes
                         Debug.WriteLine(tAttribute.Value)
                     Next
                 End Sub)
2
41686d6564 26 Сен 2019 в 16:02