returnステートメントのブロック内にa を配置するfinallyと、コンパイラは次のように通知します。
コントロールは、finally 句の本体を離れることはできません
例:
try
{
}
catch
{
}
finally
{
return;
}
どうしてこれなの?
ブロックの内側とブロックreturn 1の内側にいるとどうなるか考えてみてください... 関数は 2 つの値を返そうとします! と を組み合わせたオプションは、制御フローに関して網羅的です。tryreturn 0finallytrycatch
これは仕様によるものであり、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.
}