私は、同僚がコード内の奇妙な動作をデバッグするのを手伝っています。次のサンプルは、これを示しています。
static void Main(string[] args)
{
string answer = Sample();
Console.WriteLine(answer);
}
public static string Sample()
{
string returnValue = "abc";
try
{
return returnValue;
}
catch (Exception)
{
throw;
}
finally
{
returnValue = "def";
}
}
このサンプルは何を返しますか?
finally ブロックのせいで "def" を返していると思うかもしれませんが、実際には "abc" を返しますか? コードをステップ実行し、finally ブロックが実際に呼び出されていることを確認しました。
本当の答えは、そもそもこのようなコードを書くべきではないということですが、私はまだ動作について困惑しています。
編集:いくつかの回答に基づいてフローを明確にする。
コードをステップ実行すると、finally が return の前に実行されます。