在C#中调试foreach循环:这是什么迭代?

除了设置一个调试变量并在每次启动foreach时增加它,当您与Visual Studio调试器连接时,有没有办法告诉这是循环中的第X个时间?

我想这将是Visual Studio的一个功能,如果有的话,而不是将被添加到编译代码的东西。


下面是一个以前的堆栈溢出问题,这似乎是你要找的东西:get-index-of-current-foreach-iteration

从该链接引用的答案:

Foreach用于迭代实现IEnumerable的集合。 它通过调用集合上的GetEnumerator来完成此操作,该集合将返回一个枚举器。

这个枚举器有一个方法和一个属性:

  • 的MoveNext()
  • 当前
  • 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?

    下一篇: Counter in foreach loop in C#