這是一道面試題,首先finally{}里面的code肯定是會執行的,至於在return前還是后,
看答案說的是在return后執行,我覺得不對,百度了一下,有說return前的,有說return后的,還有return中間執行的。遂做了一個小測試如下:
static void Main(string[] args)
{
//測試
Test();
System.Console.WriteLine("結束了");
System.Console.ReadLine();
}
/// <summary>
/// 測試
/// </summary>
/// <returns></returns>
private static int Test()
{
try
{
System.Console.WriteLine("好,開始了");
return ReturnInt();
}
catch (Exception exception)
{
System.Console.WriteLine("我是異常");
throw;
}
finally
{
System.Console.WriteLine("我是finally");
}
}
/// <summary>
/// 返回數字
/// </summary>
/// <returns></returns>
private static int ReturnInt()
{
System.Console.WriteLine("我是return");
return 1;
}
測試結果如下:

所以我覺得finally{}里面的code是在return之后執行的。
此測試較粗糙,如有其它方法證明,望告知。
----------------------------------------------------------------------------------------------華麗的分割線-----------------------------------------------------------------------------------------------------------------------------------------------
之前的測試果然很粗糙,搞錯了一個概念,return到底是在什么時候才算執行,什么時候執行完。上面打印“我是return”的時候,我以為是return執行完了,其實那個時候只是去准備return的返回值去了,並沒有真正的返回“1”並跳出Test()方法,准備好返回值之后,接着去執行finally{}里面的code,打印了“我是finally”,最后Test()方法才算執行完,並真正的返回(return)“1”到main里面。
按照@以后會覺得昵稱很幼稚 老哥的提醒,修改了一下main()里面的代碼,
static void Main(string[] args)
{
//測試
Console.WriteLine("Test結果:" + Test());
System.Console.WriteLine("結束了");
System.Console.ReadLine();
}
結果如下:

所以finally{}里面的code應該是在return之前執行的。
在http://bbs.csdn.net/topics/60474475 此貼中,五樓的老哥的話,“函數應該是棧調用,如果先執行return ,哪不是退到上個棧了,怎么調用finally, 所以我覺得先調用finally”,
在http://blog.csdn.net/gaoyuanfeng/article/details/4064388 文章中,finally與return的關系也講得很明白了,這一天天的真是受教了。
