try後的finally {}裡的程式碼會不會被執行,什麼時候被執行?
阿新 • • 發佈:2019-01-03
先看下面一段程式碼
static void Main(string[] args) { Console.WriteLine(GetIt()); Console.ReadKey(); } static int GetIt() { int i = 8; try { i++; Console.WriteLine("a"); return i; } finally { Console.WriteLine("b"); i++; } }
上面程式的執行結果是:ab9
static void Main(string[] args) { //Console.WriteLine(GetIt()); Console.WriteLine(GetPerson().Age); Console.ReadKey(); } static Person GetPerson() { Person p = new Person(); p.Age = 8; try { p.Age++; Console.WriteLine("a"); return p; } finally { Console.WriteLine("b"); p.Age++; } }
上面程式的執行結果是:ab10
也就是說我們在執行到try 裡面return語句時,先記錄下要返回的值,但是並沒有返回,而是去執行ffinally裡面的語句,執行完成後,再返回try裡面的先前記錄的結果
讓我們看看讀取資料庫中資料的條數的
public int QueryCount()
{
…..
try
{
return cmd.ExecuteScalar();
}
finally
{
cmd.Dispose();
}
}
先執行cmd.ExecuteScalar(),把返回值暫時存起來,然後再去執行finally(錢放在這,我去劫個色),然後把返回值返回。return都是最後執行,但是return後的表示式的計算則是在finally之前。
如果C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,因為cmd已經Dispose了。