異常與處理 C# 語言的異常處理功能可幫助您處理程式運行時出現的任何意外或異常情況。 異常處理使用 try、catch 和 finally 關鍵字嘗試某些操作,以處理失敗情況,儘管這些操作有可能失敗,但如果您確定需要這樣做,且希望在事後清理資源,就可以嘗試這樣做。 公共語言運行時 (CLR)、.NE ...
異常介紹
C# 語言的異常處理功能可幫助您處理程式運行時出現的任何意外或異常情況。 異常處理使用 try
、catch
和 finally
關鍵字嘗試某些操作,以處理失敗情況,儘管這些操作有可能失敗,但如果您確定需要這樣做,且希望在事後清理資源,就可以嘗試這樣做。 公共語言運行時 (CLR)、.NET Framework 或任何第三方庫或者應用程式代碼都可以生成異常。 異常是使用 throw
關鍵字創建的。
很多情況下,異常可能不是由代碼直接調用的方法引發,而是由調用堆棧中位置更靠下的另一個方法所引發。 在這種情況下,CLR 將展開堆棧,查找是否有方法包含針對該特定異常類型的 catch
塊,如果找到這樣的方法,就會執行找到的第一個這樣的 catch
塊。 如果在調用堆棧中的任何位置都沒有找到適當的 catch
塊,就會終止該進程,並向用戶顯示一條消息。
此示例中使用一個方法檢測是否有被零除的情況;如果有,則捕獲該錯誤。 如果沒有異常處理,此程式將終止並產生“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 }
異常的特點:
-
各種類型的異常最終都是由
System.Exception
派生而來。 -
在可能引發異常的語句周圍使用
try
塊。 -
一旦
try
塊中發生異常,控制流將跳轉到第一個關聯的異常處理程式(無論該處理程式存在於調用堆棧中的什麼位置)。 在 C# 中,catch
關鍵字用於定義異常處理程式。 -
如果給定異常沒有異常處理程式,則程式將停止執行,並顯示一條錯誤消息。
-
除非您可以處理某個異常並使應用程式處於已知狀態,否則請不要捕捉該異常。 如果捕捉
System.Exception
,請在catch
塊的末尾使用throw
關鍵字再次引發該異常。 -
如果
catch
塊定義了一個異常變數,則可以用它獲取有關所發生異常類型的更多信息。 -
程式可以使用
throw
關鍵字顯式地引發異常。 -
異常對象包含有關錯誤的詳細信息,比如調用堆棧的狀態以及有關錯誤的文本說明。
-
即使發生異常也會執行
finally
塊中的代碼。 使用finally
塊釋放資源,例如,關閉在try
塊中打開的任何流或文件。 -
.NET Framework 中的托管異常是憑藉 Win32 結構化異常處理機制實現的。
【博主】反骨仔
【出處】http://www.cnblogs.com/liqingwen/p/6193354.html
【參考】微軟官方文檔