我想创建一堆错误。每个都特定于自己的类和模块。然后我想将id附加到异常,所以当我的msg改变时,id仍然是相同的。如何在不维护大型全局枚举的情况下创建此错误列表?
答案 0 :(得分:9)
将无符号32位十六进制数字范围除以层次结构:
0xMMCCCEEE
其中:
然后你可以有0到0xFF(256)个模块,每个类和错误都有0到0xFFF(4096),你只需要确保每个错误对于它的类是唯一的,并且每个类都是唯一的模块,因此您不必将所有错误消息保存在一个巨大的表中。
示例:
0x0401D00A
那是模块04,类01D,错误00A。
答案 1 :(得分:4)
为每个错误生成GUID。
答案 2 :(得分:1)
为每个错误设置唯一标识符的目的是什么?您的代码抛出的任何异常都具有唯一标识它的信息,即异常的类型以及抛出它的模块名称和代码行。您不需要为异常分配ID,以便知道它与具有不同类型,模块或行的异常不同。
一般而言,为实体分配唯一ID的需要源于需要将关于该实体的其他信息保存在某种耐用存储中。耐用商店的特点是什么?这些要求几乎肯定会为评估您提出的任何特定ID方案的适用性提供基础。它们是什么?
答案 3 :(得分:0)
Guid.CreateGuid();
答案 4 :(得分:0)
一个天真的想法是,每个可能的“错误”都可以在“错误空间”中分配一个点。考虑一个简单的例子,其中一个方法抛出一个特定的错误(我会礼貌地说“抛出”,虽然在上下文中,它曾经是“返回”):
public void MyMethod() {
// ...
throw new ErrorException(ErrorCodes.MyMethodError1); // Or something
}
也许这个方法只从版本1中的一个地方调用。这意味着在该版本中可以记录错误代码MyMethodError1意味着特定的东西。
在下一个版本中,发现该方法很有用,因此从三个地方调用它。事实上,它是从其中一个地方的两个不同的代码路径调用的。 MyMethodError1现在和以前一样意味着什么?我说它没有。
只有通过考虑调用堆栈确定的调用情况,才能确定特定异常的含义。错误代码对此没有帮助。