C#異常處置中try和catch語句及finally語句的用法示例。本站提示廣大學習愛好者:(C#異常處置中try和catch語句及finally語句的用法示例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#異常處置中try和catch語句及finally語句的用法示例正文
應用 try/catch 處置異常
try-catch 塊的用處是捕獲和處置任務代碼所生成的異常。 有些異常可以在 catch 塊中處置,處理成績後不會再次激發異常;但更多情形下,您獨一能做的是確保激發恰當的異常。
示例
在此示例中,IndexOutOfRangeException 不是最恰當的異常:對本辦法而言 ArgumentOutOfRangeException 更適當些,由於毛病是由挪用方傳入的 index 參數招致的。
class TestTryCatch { static int GetInt(int[] array, int index) { try { return array[index]; } catch (System.IndexOutOfRangeException e) // CS0168 { System.Console.WriteLine(e.Message); // Set IndexOutOfRangeException to the new exception's InnerException. throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e); } } }
正文
招致異常的代碼被括在 try 塊中。 在厥後面緊接著添加一個 catch 語句,以便在 IndexOutOfRangeException 產生時對其停止處置。 catch 塊處置 IndexOutOfRangeException,並激發更恰當的 ArgumentOutOfRangeException 異常。 為給挪用方供給盡量多的信息,應斟酌將原始異常指定為新異常的 InnerException。 由於 InnerException 屬性是只讀,所以必需在新異常的結構函數中為其賦值。
應用 finally 履行清算代碼
finally 語句的目標是確保即便在激發異常的情形下也能立刻停止需要的對象(平日是保留內部資本的對象)清算。此類清算功效的一個示例是在應用後立刻對 FileStream 挪用 Close,而不是期待公共說話運轉時對該對象停止渣滓收受接管,以下所示:
static void CodeWithoutCleanup() { System.IO.FileStream file = null; System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); file.Close(); }
為了將下面的代碼轉換為 try-catch-finally 語句,須要將清算代碼與任務代碼離開,以下所示。
static void CodeWithCleanup() { System.IO.FileStream file = null; System.IO.FileInfo fileInfo = null; try { fileInfo = new System.IO.FileInfo("C:\\file.txt"); file = fileInfo.OpenWrite(); file.WriteByte(0xF); } catch(System.UnauthorizedAccessException e) { System.Console.WriteLine(e.Message); } finally { if (file != null) { file.Close(); } } }
由於在 OpenWrite() 挪用前,try 塊內隨時都有能夠產生異常,OpenWrite() 挪用自己也有能夠掉敗,所以我們沒法包管該文件在我們測驗考試封閉它時處於翻開狀況。 finally 塊添加了一項檢討,以確保在挪用 Close 辦法前,FileStream 對象不為 null。假如沒有 null 檢討,finally 塊能夠激發本身的 NullReferenceException,然則應該盡量防止在 finally 塊中激發異常。
在 finally 塊中封閉數據庫銜接是另外一個不錯的選擇。由於有時刻數據庫辦事器許可的銜接數是無限的,所以應盡快封閉數據庫銜接。在因為激發了異常而沒法封閉銜接的情形下,應用 finally 塊也是比期待渣滓收受接管更好的一種選擇。