75

如果我有嵌套循环,并且我想立即跳出所有循环怎么办?

while (true) {
    // ...
    while (shouldCont) {
        // ...
        while (shouldGo) {
            // ...
            if (timeToStop) {
                break; // Break out of everything?
            }
        }
    }
}

在 PHP 中,break需要一个参数来表示要跳出的循环数。这样的事情可以在 C# 中完成吗?

什么可怕的东西,比如goto

// In the innermost loop
goto BREAK
// ...
BREAK: break; break; break;
4

4 回答 4

91

将嵌套循环提取到一个函数中,然后您可以使用 return 从任何地方退出循环,而不是中断。

于 2010-02-26T02:32:03.587 回答
72

引入另一个控制标志并将其放入所有嵌套的 while 条件中,如下所示。也用那个替换你的 while(true) 条件

bool keepLooping = true;
while (keepLooping) {
    // ...
    while (shouldCont && keepLooping) {
        // ...
        while (shouldGo && keepLooping) {
            // ...
            if (timeToStop) { 
                keepLooping  = false;
                break; // break out of everything?
            }
        }  
    }
}
于 2010-02-26T03:17:51.057 回答
29

Goto 只有在受到虐待时才会变得丑陋。退出某些嵌套的最内层循环是可以接受的。但是......必须首先问为什么那里有这么多嵌套。

简短的回答:没有。

于 2010-02-26T02:31:33.123 回答
3

如果您想打破整个方法,请使用下面的代码。如果您只想跳出方法中的一系列循环而不跳出方法,那么已经发布的答案之一将完成这项工作。

if (TimeToStop)
{
   return;
}
于 2012-02-08T17:35:57.560 回答