在C#中与Ruby的"redo"等效的语句是什么?

4

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


3
continue语句仍会增加循环计数器。 - Simon Whitehead
我知道。我的意思是让楼主尝试使用continue。这不是一个答案,只是一条评论 :) - Saju
不幸的是,我需要计数器保持不变,因为在迭代时我想处理整个集合,而不仅仅是那些没有抛出异常的元素。 - Jurgen Camilleri
3个回答

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

Do...while 是一种类似于标准的 while 循环的结构,不同之处在于它会在每次迭代结束后检查条件。这样,循环内的代码至少会被执行一次。将其放在一个 forforeach 循环中,就可以获得你想要的行为。这比 Simon 的答案更简单,因为它不需要额外的变量,不使用 continue,也不会干扰循环计数器。


5
为什么不直接使用:
虽然goto并不是每个人都喜欢的,但在这种情况下它很容易理解。
for(...)
{
redo:

   //...

   if (...)
      goto redo;




}

@TylerLong:这不是最重要的吗? - Onur

3
不行。你最接近的选择可能是像这样:

不行。你最接近的选择可能是像这样:

bool redoCalled = false:

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

    // other stuff here

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

如果在上一个循环中设置了redoCalled,那么这个方法就不起作用。你需要在循环结束时将i减少。 - Onur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接