Прочитав 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 ответ
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)
Похожие вопросы
Новые вопросы
vb.net
Visual Basic.NET (VB.NET) - это мультипарадигмальный, управляемый, типобезопасный, объектно-ориентированный язык компьютерного программирования. Наряду с C # и F # это один из основных языков, нацеленных на .NET Framework. VB.NET можно рассматривать как эволюцию Microsoft Visual Basic 6 (VB6), но реализованную в Microsoft .NET Framework. НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов VB6, VBA или VBScript.