使用调试器时,C#变量内容发生了变化

时间:2013-09-18 07:51:23

标签: c# .net xml debugging variables

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

2 个答案:

答案 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>());