在我的C#程序中,我解析一个XML文件,该文件是以前使用XSLT创建的。当我正常运行程序时,变量extraClasses包含3个节点。问题在于,我使用的选择器在应用于此特定XML时必须返回2个节点。

为了找到代码中的错误,我使用了调试器。当我检查变量extraClasses的值时,节点数为2,结果是预期的。如果不检查变量,则节点数为3,结果不正确。

此外,当我添加if语句以检查extraClasses计数是否大于2时,分配后,我的程序可以正常工作(extraClasses.Count = 2)。

为什么会这样呢?为什么值检查会更改变量的内容?我正在使用C#和.NET Framework 4。

var extraClasses = xml.SelectNodes("//Class[@level='2']");

foreach (XmlElement extraClass in extraClasses) {
/* create some new nodes and append to the xml */
}

最佳答案

我认为这是因为在调试模式中“触摸”它时会调用extraClasses.GetEnumerator()。MoveNext。这样,您将丢失一个元素。这可能是因为使用了SelectNodes中的收益回报。

您可以尝试以下方法:

var extraClasses = new List<XmlElement>( xml.SelectNodes("//Class[@level='2']") );

foreach (XmlElement extraClass in extraClasses) {
/* create some new nodes and append to the xml */
}

09-04 22:13