標籤:溢出 microsoft init 間接 system att 問題 失敗 理解
一、異常處理的理解?
異常處理是指程式在運行過程中,發生錯誤會導致程式退出,這種錯誤,就叫做異常。
因此處理這種錯誤,就稱為異常處理。
二、異常處理如何操作?
C# 異常處理時建立在四個關鍵詞之上的:try、catch、finally 和 throw。
1、try:一個 try 塊標識了一個將被啟用的特定的異常的代碼塊。後跟一個或多個 catch 塊。
2、catch:程式通過例外處理常式捕獲異常。catch 關鍵字表示異常的捕獲。
3、finally:finally 塊用於執行給定的語句,不管異常是否被拋出都會執行。
例如如果你開啟一個檔案,不管是否出現異常檔案都要被關閉。
4、throw:當問題出現時,程式拋出一個異常。使用 throw 關鍵字來完成。
文法樣本:
try{ // 引起異常的語句}catch( ExceptionName e1 ){ // 錯誤處理代碼}catch( ExceptionName e2 ){ // 錯誤處理代碼}catch( ExceptionName eN ){ // 錯誤處理代碼}finally{ // 要執行的語句}
三、C#中的異常類
C# 異常是使用類來表示的。C# 中的異常類主要是直接或間接地派生於System.Exception
(1).由System.SystemException派生的異常類型:
System.AccessViolationException 在試圖讀寫受保護記憶體時引發的異常。
System.ArgumentException 在向方法提供的其中一個參數無效時引發的異常。
System.Collections.Generic.KeyNotFoundException 指定用於訪問集合中元素的鍵與集合中的任何鍵都不匹配時所引發的異常。
System.IndexOutOfRangeException 訪問數組時,因元素索引超出數組邊界而引發的異常。
System.InvalidCastException 因無效類型轉換或顯示轉換引發的異常。
System.InvalidOperationException 當方法調用對於對象的目前狀態無效時引發的異常。
System.InvalidProgramException 當程式包含無效Microsoft中繼語言(MSIL)或中繼資料時引發的異常,這通常表示產生程式的編譯器中有bug。
System.IO.IOException 發生I/O錯誤時引發的異常。
System.NotImplementedException 在無法實現請求的方法或操作時引發的異常。
System.NullReferenceException 嘗試對Null 物件引用進行操作時引發的異常。
System.OutOfMemoryException 沒有足夠的記憶體繼續執行程式時引發的異常。
System.StackOverflowException 掛起的方法調用過多而導致執行堆疊溢位時引發的異常。
(2).由System.ArgumentException派生的異常類型:
System.ArgumentNullException 當將Null 參考傳遞給不接受它作為有效參數的方法時引發的異常。
System.ArgumentOutOfRangeException 當參數值超出調用的方法所定義的允許取值範圍時引發的異常。
(3).由System.ArithmeticException派生的異常類型:
System.DivideByZeroException 試圖用零除整數值或十進位數值時引發的異常。
System.NotFiniteNumberException 當浮點值為正無窮大、負無窮大或非數字(NaN)時引發的異常。
System.OverflowException 在選中的上下文中所進行的算數運算、類型轉換或轉換操作導致溢出時引發的異常。
(4).由System.IOException派生的異常類型:
System.IO.DirectoryNotFoundException 當找不到檔案或目錄的一部分時所引發的異常。
System.IO.DriveNotFoundException 當嘗試訪問的磁碟機或共用不可用時引發的異常。
System.IO.EndOfStreamException 讀操作試圖超出流的末尾時引發的異常。
System.IO.FileLoadException 當找到託管程式卻不能載入它時引發的異常。
System.IO.FileNotFoundException 試圖訪問磁碟上不存在的檔案失敗時引發的異常。
System.IO.PathTooLongException 當路徑名或檔案名稱超過系統定義的最大長度時引發的異常。
(5).其他常用異常類型:
ArrayTypeMismatchException 試圖在數組中儲存錯誤類型的對象。
BadImageFormatException 圖形的格式錯誤。
DivideByZeroException 除零異常。
DllNotFoundException 找不到引用的dll。
FormatException 參數格式錯誤。
MethodAccessException 試圖訪問私人或者受保護的方法。
MissingMemberException 訪問一個無效版本的dll。
NotSupportedException 調用的方法在類中沒有實現。
PlatformNotSupportedException 平台不支援某個特定屬性時拋出該錯誤。
四、樣本
class MyExceptionTest{ static double SafeDivision(double x, double y) { if (y == 0) throw new System.DivideByZeroException(); return x / y; } static void Main() { double a = 98, b = 0; double result = 0; try { result = SafeDivision(a, b); Console.WriteLine("{0} divided by {1} = {2}", a, b, result); } catch (DivideByZeroException e) { Console.WriteLine("Attempted divide by zero."); } }}
公眾號:閱讀原文
【基礎】C#異常處理的總結