C#中Ruby“redo”的等价物

时间:2013-01-27 11:27:05

标签: c# .net ruby loops for-loop

是否有一种在C#中执行redo作业的等效方法?即返回到循环的顶部并重新执行而不检查条件或增加循环计数器。感谢。

3 个答案:

答案 0 :(得分:8)

for (int i = 0; i < 100; i++)
{
    do
    {
        DoYourStuff();
    } while (ShouldWeDoThatAgain());
}

Do...while就像一个标准的while循环,除了在每次迭代之前检查它的条件,它会在之后检查。这样,循环内的代码将始终至少执行一次。将其粘贴在forforeach循环中,这样可以获得您想要的行为。这比Simon的回答简单一点,因为它不需要额外的变量,不使用continue,也不会干扰循环计数器。

答案 1 :(得分:5)

为什么不简单:

虽然goto并不是每个人都喜欢的,但在这种情况下它很可读......

for(...)
{
redo:

   //...

   if (...)
      goto redo;




}

答案 2 :(得分:3)

没有。你最接近的是这样的:

bool redoCalled = false:

for (int i = 0; i < 10; i++) {
    if (redoCalled) {
        i--;
        redoCalled = false;
    }

    // other stuff here

    if (redoWanted) {
        redoCalled = true;
        continue;
    }
}