C#中foreach循环里XmlNode与XmlNode.ChildNodes的差异及索引器作用
两段代码的差异分析
两段代码在功能上完全等价。
因为XmlNode实现了IEnumerable接口,直接在foreach中遍历XmlNode实例时,底层会调用它的ChildNodes.GetEnumerator()方法,本质就是遍历该节点的子节点集合。所以第一段代码:
XmlNode x = GetNode(); foreach (var n in x) {}
和第二段代码:
XmlNode x = GetNode(); foreach (var n in x.ChildNodes) {}
执行逻辑完全一致,不存在差异。
XmlNode索引器与ChildNodes的功能差异
XmlNode的索引器具备ChildNodes没有的直接查找子节点能力:
- 索引器支持按节点名称(或命名空间+本地名称)快速获取第一个匹配的子节点,示例:
// 获取第一个名为"book"的子节点 XmlNode bookNode = x["book"]; // 获取指定命名空间下第一个名为"book"的子节点 XmlNode nsBookNode = x["book", "http://example.com/books"]; - 而
ChildNodes仅返回当前节点所有子节点的集合,本身不提供查找功能,若要定位特定节点,需要手动遍历集合或结合SelectSingleNode等方法实现。
内容的提问来源于stack exchange,提问作者jmoreno
相关产品推荐
相关产品推荐

