在程式設計中,例外處理(Exception Handling)是一種用於處理在執行時期可能發生的錯誤或異常情況的機制。
C# 提供了一套強大的例外處理機制,用於識別、捕捉和處理執行期間可能發生的錯誤。
這有助於改進程式的穩定性和可靠性。
以下是 C# 中例外處理的主要元素:
  1. try、catch、finally 區塊:
    • try 區塊:
    • 包含預期可能引發例外的程式碼區塊。
    • catch 區塊:
    • 在 try 區塊中引發例外時,catch 區塊用於捕捉並處理例外。 以下是常用的 catch 常數:
      • Exception:
      • 所有例外的基底型別,可以捕捉任何類型的例外。
      • DivideByZeroException:
      • 當除法操作中的除數為零時引發的例外。
      • ArgumentException:
      • 當方法的引數無效時引發的例外。
      • ArgumentNullException:
      • 當嘗試使用 null 引數而不允許 null 時引發的例外。
      • FileNotFoundException:
      • 當嘗試存取不存在的檔案時引發的例外。
      • InvalidOperationException:
      • 當物件處於無效狀態時引發的例外。
    • finally 區塊:
    • 無論是否發生例外,finally 區塊中的程式碼都會執行。通常用於執行清理工作。
  2. when 關鍵字:
  3. 除了例外狀況類型之外,你也可以指定例外狀況篩選準則,進一步檢查例外狀況,並決定對應的 catch 區塊是否處理該例外狀況。
  4. throw 關鍵字:
  5. throw 用於在程式碼中顯示引發例外。你可以使用現有的例外類型,也可以自訂例外類型。
  6. 自訂例外:
  7. 你可以自訂自己的例外類型,繼承自 Exception 類別。
  8. try 隱含 finally:
  9. 在 C# 8.0 之後,你可以使用 finally 區塊而不使用 catch 區塊,使 try 區塊隱含 finally。

範例一、分母為零產稱中斷。
try
{
    int a=1 , b=0;
    int c = a / b;
    Console.WriteLine(c);
}
catch (DivideByZeroException ex)//分母為 0 產生中斷
{
    Console.WriteLine($"Error: {ex.Message}");
}
finally //不管有無錯誤都會執行
{
    Console.WriteLine("Finally block executed");
}
執行結果


範例二、自訂中斷
try
{
    int a = 1, b=0;
    int c;
    if (b == 0)//預防分母為零
    {
        throw new DivideByZeroException("Cannot divide by zero");
    }
    c = a / b;
    Console.WriteLine(c);
}
catch (DivideByZeroException ex)//分母為 0 產生中斷
{
    Console.WriteLine($"Error: {ex.Message}");
}
執行結果


範例三、when 條件過濾
try
{
    int a = 1, b = 0;
    int c = a / b;
    Console.WriteLine(c);
}
catch (Exception e) when (e is ArgumentException || e is DivideByZeroException)
{
    Console.WriteLine($"Processing failed: {e.Message}");
}
執行結果