簡體   English   中英

如何創建全局唯一錯誤ID? C#

[英]How do i create a global unique error id? C#

我想創建一堆錯誤。 每個特定於其自己的類和模塊。 然后我想將ID附加到異常,以便當我的味精更改時ID仍然相同。 如何在不維護較大的全局枚舉的情況下創建此錯誤列表?

將無符號的32位十六進制數字范圍划分為一個層次結構:

0xMMCCCEEE

哪里:

  • MM是模塊ID
  • CCC是班級ID
  • EEE是錯誤ID

然后,您可以擁有0到0xFFF(256)個模塊,以及0到0xFFF(4096)的每個類和錯誤,並且只需確保每個錯誤對於其類都是唯一的,並且每個類對於其模塊都是唯一的,因此您不必將所有錯誤消息都保存在一個巨型表中。

例:

0x0401D00A

那是模塊04,類01D,錯誤00A。

為每個錯誤生成一個GUID。

為每個錯誤擁有唯一的標識符的目的是什么? 您的代碼引發的任何異常都已經具有唯一標識它的信息,即異常的類型以及引發該異常的模塊名稱和代碼行。 您無需為異常分配ID,就可以知道它與具有不同類型,模塊或行的異常是不同的。

一般而言,為實體分配唯一ID的需要源於將有關該實體的其他信息保留在某種持久性存儲中的需求。 那家耐用品店的特點是什么? 這些要求幾乎肯定會為評估您提出的任何特定ID方案的適用性提供基礎。 這些是什么?

Guid.CreateGuid();

天真的想法是,可以在“錯誤空間”中為每個可能的“錯誤”分配一個點。 考慮一個簡單的例子,其中一個方法拋出一個特定的錯誤(我會很禮貌,說“ throws”,盡管在上下文中它曾經是“ returns”):

public void MyMethod() {
    // ...
    throw new ErrorException(ErrorCodes.MyMethodError1); // Or something
}

也許只能從版本1中的某個地方調用此方法。這意味着在該版本中可能會記錄錯誤代碼MyMethodError1表示特定的東西。

在下一發行版中,該方法被發現有用,因此從三個地方調用了該方法。 實際上,它是從其中一個地方的兩個不同的代碼路徑調用的。 現在,MyMethodError1意味着和以前一樣嗎? 我說不是。

只有考慮到調用堆棧所確定的調用情況,才能確定特定異常的含義。 錯誤代碼無濟於事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM