gpt4 book ai didi

使用调试器时更改的 C# 变量内容

转载 作者:太空宇宙 更新时间:2023-11-03 21:42:02 25 4
gpt4 key购买 nike

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

最佳答案

我认为这是因为当您在 Debug模式下“触摸”它时会调用 extraClasses.GetEnumerator().MoveNext。这样您将丢失一个元素。这可能是因为使用了 SelectNodes 中的yield return

你可以试试这个:

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

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

关于使用调试器时更改的 C# 变量内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com