在C#中调试foreach循环:这是什么迭代?
除了设置一个调试变量并在每次启动foreach时增加它,当您与Visual Studio调试器连接时,有没有办法告诉这是循环中的第X个时间?
我想这将是Visual Studio的一个功能,如果有的话,而不是将被添加到编译代码的东西。
下面是一个以前的堆栈溢出问题,这似乎是你要找的东西:get-index-of-current-foreach-iteration
从该链接引用的答案:
Foreach用于迭代实现IEnumerable的集合。 它通过调用集合上的GetEnumerator来完成此操作,该集合将返回一个枚举器。
这个枚举器有一个方法和一个属性:
Current返回Enumerator当前所在的对象,MoveNext将Current更新为下一个对象。
显然,一个索引的概念对于枚举的概念来说是陌生的,不可能完成。
因此,大多数集合都可以使用索引器和for循环结构来遍历。
与使用局部变量跟踪索引相比,我更喜欢在这种情况下使用for循环。
在循环内设置断点,然后右键单击断点来设置条件。 您也可以在调试时右击查看命中计数,并在需要时重置。 您可以设置一个布尔表达式,当断点达到有条件断点时(或者只是经过),该布尔表达式被计算。
扩展Garo Yeriazarian的回答...
没有重新编译的快速和肮脏的方式。 示例代码:
var ints = new[] {5, 6, 0, 1};
foreach (var i in ints)
{
Debug.WriteLine(100 / i);
}
在循环之前添加一个断点,并在其中一个断点。 当第一个命中并且你想开始计数时,设置一个命中计数条件:
设置一些大的命中计数条件并重置计数器并继续。 然后当异常或任何火灾发生时,您可以再次查看“当前命中次数”。
链接地址: http://www.djcxy.com/p/52975.html上一篇: Debugging a foreach loop in C#: what iteration is this?