異常介紹 C# 語言的異常處理功能可幫助您處理程式運行時出現的任何意外或異常情況。 異常處理使用 try、catch 和 finally 關鍵字嘗試某些操作,以處理失敗情況,儘管這些操作有可能失敗,但如果您確定需要這樣做,且希望在事後清理資源,就可以嘗試這樣做。 公共語言運行時 (CLR)、.NET ...
異常介紹
我們平時在寫程式時,無意中(或技術不夠),而導致程式運行時出現意外(或異常),對於這個問題, C# 有專門的異常處理程式。 異常處理所涉及到的關鍵字有 try
、catch
和 finally
等,用來處理失敗的情況,當然,儘管這些操作也有可能失敗,如果你確定需要這樣做(一般來說是釋放,清理某些資源或記錄日誌等),就可以嘗試這樣做。 CLR、.NET 自身的類庫、其它第三方庫或者你寫的程式代碼都有可能會出現異常。當然,你也可以直接使用 throw ,通過顯式的形式來進行創建異常。
一種普遍出現的情形,異常很可能不是由代碼直接引發,而是由調用堆棧中更靠下的位置其它方法所引發。在這種情形下下,CLR 會展開堆棧,並查找是否有包含針對你指定異常類型的 catch
塊的代碼,如果找到的話,就會執行最先匹配的 catch
塊。 如果在調用堆棧中的任意位置中,異常處理程式都沒有找到合適(你寫的)的 catch
塊,就會自動終止該進程,並向用戶顯示(拋出)一條錯誤的信息。
在這裡我寫了一個被 0 處會出現異常(會顯式引發 DivideByZeroException 異常)的示例;如果在執行的途中出現異常,則捕獲該異常。
1 /// <summary> 2 /// 除法 3 /// </summary> 4 /// <param name="x"></param> 5 /// <param name="y"></param> 6 /// <returns></returns> 7 static double Division(double x, double y) 8 { 9 if (y == 0) 10 { 11 throw new DivideByZeroException(); 12 } 13 14 return x / y; 15 } 16 17 static void Main(string[] args) 18 { 19 //假設 20 double x = 250, y = 0; 21 22 try 23 { 24 var result = Division(x, y); 25 Console.WriteLine($"result: {result}"); 26 } 27 catch (DivideByZeroException e) 28 { 29 30 Console.WriteLine(e); 31 } 32 33 Console.Read(); 34 }
Excetion 特點
-
所有異常類型(包括自定義的異常)都是由基類
Exception
派生。 -
使用
try
塊包圍你認為可能會出現異常的代碼。 -
一旦
try
塊中發生異常,控制流將按順序找到與之關聯的 catch,如果一直沒有找到關聯的,會引發最終的異常基類 Exception 內的處理程式(前提你已經 catch)。 -
如果出現異常卻沒有對應的異常處理程式,則該程式將會停止執行,並拋出對應錯誤的信息。
-
在
catch
定義了的異常變數,可以獲取對應異常類型的有關信息,比如調用堆棧的狀態和錯誤的說明,具體看 Excetion 的屬性。 -
throw
關鍵字可以顯式引發異常。 -
即使出現異常也會執行
finally
塊中的代碼。 一般來說,我們會使用finally
塊釋放資源,例如,關閉xx流。
C# 基礎回顧系列
《C# 知識回顧 - 表達式樹 Expression Trees》
《C# 知識回顧 - 特性 Attribute》、《剖析 AssemblyInfo.cs - 瞭解常用的特性 Attribute》《C# 知識回顧 - 委托 delegate》、《C# 知識回顧 - 委托 delegate (續)》
《C# 知識回顧 - 事件入門》、《C# 知識回顧 - Event 事件》
《string 與 String,大 S 與小 S 之間沒有什麼不可言說的秘密》
【博主】反骨仔
【出處】http://www.cnblogs.com/liqingwen/p/6193354.html
【參考】微軟官方文檔