web-dev-qa-db-ja.com

C#で複数のループを一度に抜け出すには?

ネストされたループがあり、それらすべてを一度にブレークアウトしたい場合はどうなりますか?

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;
63
Nick Heiner

ネストされたループを関数に抽出すると、returnを使用して、中断するのではなく、どこからでもループから抜け出すことができます。

80

別の制御フラグを導入し、以下のようなネストされたすべてのwhile条件に入れます。また、あなたが持っているwhile(true)条件をそれに置き換えます

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

後藤は、虐待されたときのみ恐ろしいです。いくつかのネストの最も内側のループからドロップアウトすることは受け入れられます。しかし...そもそもなぜそこに多くのネストがあるのか​​を問う必要があります。

短い答え:いいえ。

27
Andrew

メソッド全体から抜け出したい場合は、以下のコードを使用します。メソッドから抜け出すことなく、メソッド内の一連のループから抜け出すだけの場合は、すでに投稿された回答の1つがその仕事をします。

if (TimeToStop)
{
   return;
}
2
tolu619