首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 異常處理完全指南:try-catch-finally 最佳實踐

     編輯:關於C#

異常處理是 C# 程式健壯性的基石。本文透過多個實戰代碼片段,系統講解 try-catch-finally 機制、多重捕獲順序、自定義異常、以及資源釋放模式。

基礎語法結構

try
{
    // 可能拋出異常的代碼
    int n = 10, m = 0;
    float f = n / m; // 會拋出 DivideByZeroException
}
catch (DivideByZeroException ex)
{
    // 捕獲特定異常
    Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
    // 捕獲所有其他異常(需放在最後)
    Console.WriteLine(ex.Message);
}
finally
{
    // 無論是否發生異常,必定執行(資源釋放、日誌記錄等)
    Console.WriteLine("finally");
}

關鍵規則與陷阱

  1. 捕獲順序:具體異常類型必須在基類 Exception 之前,否則編譯錯誤或永遠捕獲不到。
  2. catch 省略參數:catch { } 等同於 catch (Exception) { },但無法獲取異常對象。
  3. finally 必執行性:即使 try 或 catch 中有 return,finally 仍會執行(除非進程終止)。
  4. 主動拋出異常:使用 throw new ArgumentNullException(); 實現防禦性編程。

資源管理模式:文件流示例

StreamWriter sw = new StreamWriter("exceptions.txt");
try
{
    for (byte b = 0; b < 10; b++)
    {
        sw.WriteLine($"Byte {b+1}:{b}");
        // 故意越界觸發異常
        byte[] arr = new byte[3];
        arr[b] = b;
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    sw.WriteLine("Close");
    sw.Close(); // 確保資源釋放
}

自定義異常類別

public class TooManyItemsException : Exception
{
    public TooManyItemsException() : base("自定義異常:項目過多") { }
}

配合 throw new TooManyItemsException(); 使用,可精準表達業務錯誤語義。

總結

掌握異常處理的層級捕獲、資源確定性釋放、自定義異常設計,是編寫高質量 C# 代碼的必備技能。建議在關鍵資源操作(IO、數據庫、網絡)中嚴格遵循 try-finally 或 using 模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved