return
ステートメントのブロック内にa を配置するfinally
と、コンパイラは次のように通知します。
コントロールは、finally 句の本体を離れることはできません
例:
try
{
}
catch
{
}
finally
{
return;
}
どうしてこれなの?
ブロックの内側とブロックreturn 1
の内側にいるとどうなるか考えてみてください... 関数は 2 つの値を返そうとします! と を組み合わせたオプションは、制御フローに関して網羅的です。try
return 0
finally
try
catch
これは仕様によるものであり、C# 仕様で説明されています。
break
、continue
、またはgoto
ステートメントがfinally
ブロックの外に制御を移すのは、コンパイル時エラーです。、break
、continue
またはgoto
ステートメントがfinally
ブロック内にある場合、ステートメントのターゲットは同じfinally
ブロック内にある必要があります。そうでない場合、コンパイル時エラーが発生します。ブロック
return
内でステートメントが発生するのは、コンパイル時エラーですfinally
。
ブロック
return
内でステートメントが発生するのは、コンパイル時エラーです。finally
現在の回答は、これがうまくいく理由を説明していますが、戻り値が含まれておらず、finally
句がメソッドの最後のものである場合に、この制約を回避するのがいかに簡単であるかに注意することも重要だと思います(これはよく起こります):
try {}
catch {}
finally
{
FinallyMethod();
}
次に、ステートメントを好きなFinallyMethod
だけ使用できますreturn
void FinallyMethod()
{
//...
if (x == y)
return;
else
a = b;
//etc.
}