我有一段代码遍历 XmlNodeList 中的节点,并根据节点名称为每个节点创建不同的对象,并将其添加到列表中以进行打印。
For Each node as XmlNode In nodeList
Select Case node.Name.ToUpper()
Case "SHAPE"
_items.Add(New ShapeTemplate(node, Me))
Case "TEXTBLOCK"
_items.Add(New TextblockTemplate(node, Me))
End Select
Next
这段代码工作正常,但由于 ShapeTemplate 和 TextblockTemplate 构造函数必须完成所有工作,所以它非常慢。由于订单对象添加到 _items 并不重要,我认为加快它的好方法是使用 parallel.ForEach 循环。问题是 XmlNodeList 不能与 parallel.ForEach 一起使用,因为它是一个非泛型集合。我一直在寻找将 XmlNodeList 转换为 List(Of XmlNode) 的方法,但没有成功。我不断看到的答案是
Dim nodes as New List(Of xmlNode)(nodeList.Cast(Of xmlNode)())
但是当我尝试它时,我收到一条错误消息,告诉我“Cast”不是 XmlNodeList 的成员。
我也尝试过像这样使用 TryCast
Dim nodes as List(Of XmlNode) = TryCast(CObj(nodeList), List(Of XmlNode))
但它会导致节点为 Nothing,因为无法转换对象。
有谁知道我如何在 parallel.ForEach 循环中使用 XmlNodeList ?
编辑:如果可以的话,我会尽量避免使用循环进行转换