在C#中使用Parallel.ForEach和XmlNodeList

Els*_*han 1 c# xml parallel.foreach

我已经完成了基本foreach循环,XmlNodeList如下所示.

示例XML文件(books.xml)

XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
XmlNodeList xnList = doc.SelectNodes("catalog/book");
foreach (XmlNode node in xnList)
{
   Console.WriteLine(node["author"].InnerText);
} 
Run Code Online (Sandbox Code Playgroud)

如何将此循环转换为Parallel.ForEach

我试过这个代码.但它不起作用.

Parallel.ForEach(xnList, (XmlNode node) =>
{
   Console.WriteLine(node["author"].InnerText);
});
Run Code Online (Sandbox Code Playgroud)

这是错误2

参数1:无法转换System.Xml.XmlNodeListSystem.Collections.Generic.IEnumerable<System.Xml.XmlNode>

Yuv*_*kov 6

XmlNodeList实现非泛型IEnumerable.您需要先将其强制转换才能使用IEnumerable<XmlNode>,因为这是Parallel.ForEach对以下内容的操作:

Parallel.ForEach(xnList.Cast<XmlNode>(), (XmlNode node) =>
{
   Console.WriteLine(node["author"].InnerText);
});
Run Code Online (Sandbox Code Playgroud)