1

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

试图在我的代码中找到错误,我使用了调试器。当我检查 variable 的值时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 */
}
4

2 回答 2

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 */
}
于 2013-09-18T07:59:33.533 回答
0

设法通过使用解决问题:

var extraClasses = new List<XmlNode>(xml.SelectNodes("//Class[@level='2']").Cast<XmlNode>());
于 2013-09-19T05:54:36.390 回答