Как вырваться из нескольких циклов одновременно в C #? - PullRequest
63 голосов
/ 26 февраля 2010

Что, если у меня есть вложенные циклы, и я хочу разорвать их все сразу?

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 ]

79 голосов
/ 26 февраля 2010

Извлеките вложенные циклы в функцию, и затем вы можете использовать return, чтобы выйти из цикла из любого места, а не прерывать.

63 голосов
/ 26 февраля 2010

Введите еще один управляющий флаг и поместите его во все ваши вложенные условия, как показано ниже. Также заменяет имеющееся у вас условие while (true) на

bool keepLooping = true;
while (keepLooping) {
    // ...
    while (shouldCont && keepLooping) {
        // ...
        while (shouldGo && keepLooping) {
            // ...
            if (timeToStop) { 
                keepLooping  = false;
                break; // break out of everything?
            }
        }  
    }
}
26 голосов
/ 26 февраля 2010

Гото только отвратительно, когда злоупотребляет. Выпадение из внутреннего цикла некоторого вложения приемлемо. НО ... сначала нужно спросить, почему там так много гнезд?

Краткий ответ: Нет.

2 голосов
/ 08 февраля 2012

Если вы хотите отказаться от всего метода, используйте приведенный ниже код. Если вы хотите разорвать только серию циклов внутри метода без разрыва метода, то один из ответов, которые уже были опубликованы, выполнит эту работу.

if (TimeToStop)
{
   return;
}
...