【发布时间】:2010-10-15 02:44:52
【问题描述】:
我一直在帮助一位同事调试他们代码中的一些奇怪行为。以下示例说明了这一点:
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 之前执行。
重复: What really happens in a try { return x; } finally { x = null; } statement?
【问题讨论】: