我一直在帮助一位同事调试他们代码中的一些奇怪行为。以下示例说明了这一点:
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 在返回之前执行。