在Try、Catch、Finally區塊內外的Return陳述式的優先順序
下方是測試的程式碼:
{
string str = string.Empty;
str="Step A";
ViewBag.Message = str;
try
{
str = " B";
ViewBag.Message += str;
/*註解區塊甲
throw new Exception();
str = " E";
ViewBag.Message += str;
*/
return View();
}
catch (Exception ex)
{
str = " C";
ViewBag.Message += str;
/*註解區塊乙
return View();
*/
}
finally
{
str = " D";
ViewBag.Message += str;
//return View();
}
str = " F";
ViewBag.Message += str;
return View();
}
觀察前述的執行結果之後,可以發現Returnt陳述式的執行優先權的順序如下:
1、Try區塊內的第一個Return陳述式。
2、若Try區塊內先發生例外,則同樣是在Try區塊之內,但是在例外之後的Return陳述式不會被執行。
3、若Try區塊內發生例外,則是Catch區塊之內的Return陳述事先執行。
4、若Try區塊內發生例外,但是Catch區塊之內並無Retrun陳述式,加上VS 2012禁止Finally區塊有Return陳述式,所以是Try、Catch與Finally區塊之外的Return陳述式被執行。
所以在一般的情況下,無論如何,還是在Try、Catch與Finally區塊之外添加一個Return陳述式比較保險。