什么';s这两个enum[Flags]声明(C#)之间的区别
本文关键字:Flags 声明 区别 之间 enum 两个 什么 | 更新日期: 2023-09-27 17:57:35
这更多的是我想要理解的问题,而不是解决问题。考虑以下两个:
[Flags]
public enum Flags
{
NONE = 0x0,
PASSUPDATE = 0x1,
PASSRENDER = 0x2,
DELETE = 0x4,
ACCEPTINPUT = 0x8,
FADE_IN = 0x10,
FADE_OUT = 0x20,
FADE_OUT_COMPLETE = 0x40
}
[Flags]
public enum Flags
{
NONE = 0x0,
PASSUPDATE,
PASSRENDER,
DELETE,
ACCEPTINPUT,
FADE_IN ,
FADE_OUT,
FADE_OUT_COMPLETE
}
如果我使用后一个枚举对某个项目进行位检查,有时会出现重叠(我认为类似DELETE
的项目被解释为PASSUPDATE | PASSRENDER
,而在第一个示例中,每个项目都独立于另一个项目(即DELETE
只是DELETE
,不能使用不同标志集的组合来证明)。
在没有显式数字的情况下,枚举每次递增1(即使指定了[Flags]
),因此您得到:
[Flags]
public enum Flags
{
NONE = 0x0,
PASSUPDATE, // = 1
PASSRENDER,// = 2
DELETE,// = 3
ACCEPTINPUT,// = 4
FADE_IN ,// = 5
FADE_OUT,// = 6
FADE_OUT_COMPLETE// = 7
}
这根本不是你想要的数字(当然也不是通常是2的连续幂的逐位标志)