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

C# throw 關鍵字與自訂異常類別完整指南

     編輯:關於C#

throw 基本用法

  • throw new ExceptionType();:拋出新異常
  • throw;:在 catch 區塊中重新拋出原異常(保留堆疊追蹤)
  • throw ex;:重新拋出但重設堆疊追蹤(除錯大忌)

自訂異常類別標準模板

using System;

namespace ClsUserException
{
    // 慣例:類別名以 Exception 結尾
    public class UserEmployeeException : Exception
    {
        public string ErrorInfo { get; }

        // 無參數建構函式
        public UserEmployeeException() : base() { }

        // 帶訊息建構函式
        public UserEmployeeException(string message) : base(message)
        {
            ErrorInfo = message;
        }

        // 帶訊息與內部異常建構函式(支援異常鏈)
        public UserEmployeeException(string message, Exception inner) : base(message, inner)
        {
            ErrorInfo = message;
        }

        // 序列化建構函式(跨 AppDomain/遠端呼叫需求)
        protected UserEmployeeException(System.Runtime.Serialization.SerializationInfo info,
            System.Runtime.Serialization.StreamingContext context) : base(info, context) { }
    }
}

拋出與捕獲自訂異常

public static void Main()
{
    try
    {
        throw new UserEmployeeException("error Info of use");
    }
    catch (UserEmployeeException ex)
    {
        Console.WriteLine("輸出結果為:");
        Console.WriteLine(ex.Message);
        Console.Read();
    }
}

自訂異常設計原則

  1. 繼承 Exception,不要繼承 ApplicationException(微軟已棄用此建議)。
  2. 提供三大建構函式:無參、訊息、訊息+內部異常。
  3. 加上 [Serializable] 屬性(.NET Core 預設可序列化,Framework 需標記)。
  4. 唯讀屬性攜帶額外資訊:如錯誤代碼、驗證失敗欄位等,避免塞進 Message 字串解析。
  5. 命名以 Exception 結尾:ValidationException、InsufficientFundsException。

進階:異常過濾器 (C# 6+)

try { /* ... */ }
catch (UserEmployeeException ex) when (ex.ErrorCode == 401)
{
    // 僅處理特定錯誤代碼
}
catch (UserEmployeeException ex)
{
    // 處理其他同類異常
}

總結

throw 是領域模型表達業務規則違反的關鍵機制。善用自訂異常讓錯誤語意化、可程式化處理,配合 when 過濾器實現精準捕獲。記住:throw; 保留堆疊,throw ex; 破壞堆疊——除非你很清楚在做什麼,永遠用 throw;。

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