相当于 C# 中的 Ruby “redo”

本文关键字:redo Ruby 中的 相当于 | 更新日期: 2023-09-27 17:56:07

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

相当于 C# 中的 Ruby “redo”

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

Do...while就像一个标准的while循环,只不过不是在每次迭代之前检查其条件,而是在每次迭代之后检查。这样,循环中的代码将始终至少执行一次。把它放在一个forforeach循环中,这应该会让你得到你想要的行为。这比西蒙的答案简单一些,因为它不需要额外的变量,不使用continue,并且根本不会弄乱循环计数器。

为什么不简单地:

虽然goto并不是每个人的最爱,但在这种情况下它非常易读......

for(...)
{
redo:
   //...
   if (...)
      goto redo;


}

No.你会得到的最接近的东西是这样的:

bool redoCalled = false:
for (int i = 0; i < 10; i++) {
    if (redoCalled) {
        i--;
        redoCalled = false;
    }
    // other stuff here
    if (redoWanted) {
        redoCalled = true;
        continue;
    }
}