我发现此enum
具有Flags
属性:
[Flags]
public enum Technology
{
None = 0x0000,
X1 = 0x0001,
X2 = 0x0002,
X3 = 0x0004,
X4 = 0x0008,
X5 = 0x0010,
X6 = 0x0020,
}
分配给enum
成员的值,这是什么拼写?
那会是相同吗?
[Flags]
public enum Technology
{
None = 0,
X1 = 1,
X2 = 2,
X3 = 4,
X4 = 8,
X5 = 10,
X6 = 20,
}
如果是,为什么X5
不是16两倍于X4
的值,因为该逻辑从X1
到X4
!
Well,0x
前缀表示十六进制,而不仅仅是decimal。因此,等效声明将是
十六进制(0x
前缀)
[Flags]
public enum Technology
{
None = 0x0000,
X1 = 0x0001,
X2 = 0x0002,
X3 = 0x0004,
X4 = 0x0008,
X5 = 0x0010, // 0x0010 == 1 * 16 + 0 == 16
X6 = 0x0020, // 0x0020 == 2 * 16 + 0 == 32
}
十进制
[Flags]
public enum Technology
{
None = 0,
X1 = 1,
X2 = 2,
X3 = 4,
X4 = 8,
X5 = 16,
X6 = 32,
}
binary(请注意0b
前缀)
[Flags]
public enum Technology
{
None = 0b000000,
X1 = 0b000001,
X2 = 0b000010,
X3 = 0b000100,
X4 = 0b001000,
X5 = 0b010000,
X6 = 0b100000,
}
0x0000
以十六进制为0。这意味着0x0010
实际上是十进制的16
-使两个枚举的x5
和x6
成员不同。
为了使它们相同,在第二个enum
中,您需要16
和32
的值为x5
和x6
。
0x
前缀告诉c#编译器该值是十六进制-如Integer Literals paragraph in Integral numeric types (C# reference)中所述:
整数文字可以是
- 十进制:没有任何前缀
- 十六进制:带有0x或0X前缀
- 二进制:带有0b或0B前缀(在C#7.0和更高版本中可用)