将XmlNodeList转换为XmlNode []

Gra*_*rdx 10 c# xml .net-2.0

我有一个外部库,需要一个"XmlNode []"而不是XmlNodeList.有没有直接的方法来做到这一点,而无需迭代和转移每个节点?

我不想这样做:

XmlNode[] exportNodes = XmlNode[myNodeList.Count];
int i = 0;
foreach(XmlNode someNode in myNodeList) { exportNodes[i++] = someNode; }
Run Code Online (Sandbox Code Playgroud)

我在.NET 2.0中这样做,所以我需要一个没有linq的解决方案.

Rob*_*Rob 19

这种直截了当的方式怎么样......

var list = new List<XmlNode>(xml.DocumentElement.GetElementsByTagName("nodeName").OfType<XmlNode>());
var itemArray = list.ToArray();
Run Code Online (Sandbox Code Playgroud)

不需要扩展方法等......

  • `OfType`是LINQ扩展. (7认同)

der*_*kat 9

 XmlNode[] nodeArray = myXmlNodeList.Cast<XmlNode>().ToArray();
Run Code Online (Sandbox Code Playgroud)


Rub*_*ias 8

试试这个(VS2008和目标框架== 2​​.0):

static void Main(string[] args)
{
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.LoadXml("<a><b /><b /><b /></a>");
    XmlNodeList xmlNodeList = xmldoc.SelectNodes("//b");
    XmlNode[] array = (
        new System.Collections.Generic.List<XmlNode>(
            Shim<XmlNode>(xmlNodeList))).ToArray();
}

public static IEnumerable<T> Shim<T>(System.Collections.IEnumerable enumerable)
{
    foreach (object current in enumerable)
    {
        yield return (T)current;
    }
}
Run Code Online (Sandbox Code Playgroud)

来自这里的提示:IEnumerable和IEnumerable(Of T)2