【发布时间】:2012-10-24 17:33:50
【问题描述】:
我经常看到使用十六进制值的标志枚举声明。例如:
[Flags]
public enum MyEnum
{
None = 0x0,
Flag1 = 0x1,
Flag2 = 0x2,
Flag3 = 0x4,
Flag4 = 0x8,
Flag5 = 0x10
}
当我声明一个枚举时,我通常是这样声明的:
[Flags]
public enum MyEnum
{
None = 0,
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8,
Flag5 = 16
}
为什么有些人选择用十六进制而不是十进制写值是否有原因或理由?在我看来,使用十六进制值时更容易混淆并意外写入Flag5 = 0x16 而不是Flag5 = 0x10。
【问题讨论】:
-
如果您使用十进制数字,那么您写
10而不是0x10的可能性会降低吗?特别是因为这些是我们正在处理的二进制数,而十六进制可以轻松地转换为二进制数?0x111在脑海中翻译比273更烦人... -
遗憾的是,C# 没有明确要求写出二的幂的语法。
-
你在这里做了一些荒谬的事情。标志背后的意图是它们将按位组合。但按位组合不是该类型的元素。
Flag1 | Flag2的值为3,3不对应MyEnum的任何域值。 -
你在哪里看到的?带反光板?
-
@giammin 这是一个普遍的问题,而不是具体的实现。例如,您可以采用开源项目或仅提供网络上可用的代码。
标签: c# .net enums enum-flags