如何将ExceptionThrown_V1.ExceptionFlags转换为有效的C#枚举



根据有关.NET运行时异常事件的.NET文档,我正在尝试将值为UInt16ExceptionFlags映射到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,并且它有一个内部异常,但它不是嵌套的、重新抛出的或损坏的异常。

相关内容

  • 没有找到相关文章

最新更新