在我的C#程序中,我解析了之前使用XSLT创建的XML文件。当我正常运行程序时,变量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 */
}
答案 0 :(得分:4)
我认为这是因为在调试模式中触摸它时会调用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 */
}
答案 1 :(得分:0)
使用以下方法管理解决问题:
var extraClasses = new List<XmlNode>(xml.SelectNodes("//Class[@level='2']").Cast<XmlNode>());