在我的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 */
}