首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 異常處理實戰:Try-Catch 與 Null 檢查的最佳實踐

     編輯:程式設計綜合問答

案例程式碼分析

提供的程式碼定義了 Photo、Album 類別,並在 Main 中建立相簿與照片物件。執行時發生 NullReferenceException,原因在於 family[\"Jeny\"] 查找字串 \"Jeny\",但實際存入的照片標題為 \"Jeny \"(含尾隨空格),導致索引器回傳 null,隨後嘗試存取 objPhoto2.Title 時拋出例外。

異常類型判定

此處拋出的是 NullReferenceException(空參考例外),屬於執行時期例外,表示嘗試存取 null 物件的成員。

處理策略比較

方案一:防禦性程式設計(推薦)

Photo objPhoto2 = family[\"Jeny\"];
if (objPhoto2 != null)
{
    Console.WriteLine(objPhoto2.Title);
}
else
{
    Console.WriteLine(\"Not Found\");
}

優點:邏輯清晰、效能最佳、避免例外處理開銷。
適用場景:可預期的業務邏輯分支(如查無資料)。

方案二:Try-Catch 捕獲(不推薦用於此場景)

try
{
    Console.WriteLine(objPhoto2.Title);
}
catch (NullReferenceException)
{
    Console.WriteLine(\"Not Found\");
}

缺點:使用例外控制流程屬於「反模式」,掩蓋真正錯誤,效能較差,且捕獲範圍過廣易誤捕其他空參考錯誤。

核心原則

  • 例外僅用於真正異常、不可預期的錯誤狀況(如 I/O 失敗、資料庫連線中斷)。
  • 可預期的業務邏輯分支(如查無資料、參數驗證失敗)應使用條件判斷。
  • 避免在 ToString() 等基礎方法中包裝 Try-Catch,應由呼叫端決定如何處理 null。

改良建議

  1. 修正資料輸入:確保照片標題無尾隨空格(Trim())。
  2. 索引器回傳 null 時,呼叫端務必檢查後再使用。
  3. 若需統一錯誤訊息,可擴充方法回傳 Option<T> 或使用 TryGetValue 模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved