Подтвердить что ты не робот

Как вырваться из нескольких циклов сразу в С#?

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

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

В PHP, break принимает аргумент для числа циклов, из которых можно выйти. Может ли что-то подобное сделать в С#?

Как насчет чего-то отвратительного, например goto?

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

Ответ 1

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

Ответ 2

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

bool keepLooping = true;
while (keepLooping) {
    // ...
    while (shouldCont && keepLooping) {
        // ...
        while (shouldGo && keepLooping) {
            // ...
            if (timeToStop) { 
                keepLooping  = false;
                break; // break out of everything?
            }
        }  
    }
}

Ответ 3

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

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

Ответ 4

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

if (TimeToStop)
{
   return;
}