根据有关.NET运行时异常事件的.NET文档,我正在尝试将值为UInt16
的ExceptionFlags映射到Enum:
[Flags]
public enum ExceptionFlags : UInt16
{
HasInnerException = 0x01,
IsNestedException = 0x02,
IsRethrownException = 0x04,
IsCorruptedException = 0x08,
IsCLSComplaint = 0x10
}
但是来自事件的值不在文档中的值范围内。例如,我现在17岁,有时16岁。
将这些值映射到枚举上的标志的逻辑是什么?
0x
前面的值是十六进制文字。使用十进制文字的等价物是:
[Flags]
public enum ExceptionFlags : UInt16
{
HasInnerException = 1,
IsNestedException = 2,
IsRethrownException = 4,
IsCorruptedException = 8,
IsCLSComplaint = 16
}
对于标记为[Flags]
的枚举,每个预定义值都是2的幂。它们可以与按位OR|
组合在一起以产生未列出的值。有关详细信息,请参阅此答案。
你的例子:
十进制16=十六进制
0x10
=二进制0001 0000
=IsCLSComplaint
。这表示异常符合CLS,但它没有内部异常,也不是嵌套、重新抛出或损坏的异常。十进制17=十六进制
0x11
=二进制0001 0001
=IsCLSCompliant | HasInnerException
。这表示异常符合CLS,并且它有一个内部异常,但它不是嵌套的、重新抛出的或损坏的异常。