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

C# 自定義異常最佳實踐:StackFrame 簡化錯誤定位與統一異常處理模式

     編輯:Java 相關知識

自定義異常基類設計

public class BException : ApplicationException {
    private string _errMsg = "";
    public BException() : base() {}
    public BException(string msg) : base(msg) { _errMsg = msg; }
    public override string Message => _errMsg;

    public static BException CreateError(string msg) {
        var st = new StackTrace();
        var sf = st.GetFrame(1); // 呼叫者幀
        var mi = sf.GetMethod();
        var t = mi.DeclaringType;
        return new BException($"Error in {t.Name}::{mi.Name} -- {msg}");
    }
    public override string ToString() => _errMsg;
}

核心亮點

  1. StackFrame 精準定位調用者:`GetFrame(1)` 獲取調用 `CreateError` 的方法,自動拼裝「類名::方法名 -- 錯誤信息」,免去手動傳遞上下文。
  2. 統一錯誤信息格式:全項目調用 `BException.CreateError("具體原因")`,拋出即攔截,日誌/顯示格式一致。

ASP.NET 全局攔截示例

protected override void OnError(EventArgs e) {
    var bex = Server.GetLastError().GetBaseException() as BException;
    if (bex != null) {
        Response.Write($"");
        Server.ClearError(); // 必須清除,否則黃頁
        return;
    }
    base.OnError(e);
}

優勢總結

  • 消除返回值/out 參數傳遞錯誤信息的繁瑣與遺漏。
  • 調用者無需記憶各方法錯誤碼含義,統一 try-catch 或全局攔截。
  • StackFrame 自動上下文,錯誤定位零成本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved