前言

在完成撰寫程式後進行運作,偶爾會出現非預期的問題導致系統無法正常運作。無論是撰寫失誤所造成的,或是系統運作期間所產生錯誤,例外處理能幫住我們處理這些情況。當然,我們也能依據情境建立例外狀況物件,表示程式上運作錯誤。透過擲出與建立例外處理,我們能妥善的處理錯誤情境、列出問題點並維持系統正常的運作。
本篇文章將簡單介紹例外處理並介紹 try/catch/finally/throw 使用方法,若有錯誤或任何建議請各位先進不吝指教。

Exception


介紹

例外狀況 (Exception) 為程式執行期間發生任何非預期的情況。我們通常會使用 try/catch/finally 關鍵字來嘗試處理失敗情況,再釋放資源。 .NET 有許多不同類型的例外類別:
 - Exception
 - SystemException
 - ApplicationException
 - NullReferenceException
 - FileNotFoundException
 - SerializationException

註:所有的例外狀況都是延伸自 System.Exception


下面是一個例外處理的簡單範例:
static void CatchExample()
{
    StreamWriter sw = null;
    try
    {
        sw = new StreamWriter(@"C:\file.txt");
        sw.WriteLine("processing...");
    }
    catch (FileNotFoundException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    finally
    {
        sw.Close();
    }
}

我們會使用 try 區塊將可能發生錯誤的程式碼包起來,一旦區塊內發生例外狀況,則會進行 catch 區塊內程式進行例外處理。這段程式碼無論是否有例外狀況發生, finally 區塊內程式碼的程式碼都會被執行,以我們的範例來說:無論有無例外狀況發生,我們都需要釋放資源。

若沒有使用例外處理,您的程式會停止執行並且顯示錯誤訊息。
註:若不知道可能出現哪種例外,您可以直接使用 Exception。但能明確知道是哪種類型的例外,請直接適用該類型的例外,如FileNotFoundException、IOException...等,這可以讓工程師更容易了解問題。


理所當然,您也能建立例外狀況:透過 throw 關鍵字
var ex = new NullReferenceException("The 'Name' parameter is null.");
throw ex;
雖然可以自行建立例外處理,但不應該藉由例外處理來變更既有的程式流程或用於偵錯。您應該用於處理、紀錄或回報錯誤情況。



上一篇:[C#][Visual Studio] 陣列、集合與列舉 (Array, Collection, and Enum)
下一篇:[C#][Visual Studio] 類別與物件 (class and object)


參考資料

1. Study4TW 內部教材
2. 例外狀況和例外處理 (C# 程式設計手冊) - Microsoft docs
3.Exception 類別 - MSDN