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

|