次のC#を検討してください。
// C# .net
switch(x)
{
case 1:
for(int i = 0; i < 10; i++)
{
int val = getValue(i);
if (val == 0)
goto endswitch;
}
doMoreStuff();
break;
case 2:
doSomeThingElse();
break;
default: throw new ArgumentOutOfRangeException();
}
endswitch: ;
上記のコードサンプルに似たコードを作成しました。問題は、内側のforループの内側からswitchステートメントを壊す必要があることです。そこにステートメントを置くbreak
と、内部のforループが壊れてから、に進むだけdoMoreStuff()
です。これは私が必要としていることではありません。
ここで最もうまくいくと思われる代替案はgoto
声明ですが、私はこれが嫌われていることを知っています。
もう1つの方法は、forループ内の別の変数を追跡することですが、これによりコード行が追加され、効率が低下します。
これを行うための最良の方法は何ですか?
更新: JavaScriptでこれを行う方法があることを読みました。これは次のように機能します:(http://www.devguru.com/technologies/ecmascript/quickref/break.html)
// JavaScript
outer_loop:
for(i=0; i<3; i++)
{
document.write("<BR>" + "outer " + i + ": ");
for(j=0; j<5; j++)
{
document.write("inner " + j + " ");
if(j==x)
break outer_loop;
}
}
このようなことはC#で可能ですか?