C# flags vs sample enums
两者有什么区别
1 2 3 4 5 6 7
| [Flags]
public enum AnswerFlags
{
A = (1 << 2),
B = (1 << 1),
C = (1 << 0)
} |
和
1 2 3 4 5 6
| public enum AnswerFlags
{
A = 4,
B = 2,
C = 1
} |
为什么我要使用位而不是整数?
- 这里是问题的副本stackoverflow.com/a/8480/3856907
- 使用硬件端口和寄存器时,位通常很有用。在某些情况下,当非常紧凑的表示比清晰的代码更重要时,它们也很有用。
- 这个问题回答你:stackoverflow.com/questions/8447/&hellip;
- 这不是链接到的问题的副本。这是将值定义为移位表达式或文本的方法。
- 换一种方式比较常见(从1开始,每个值都加倍)。至于差异,得到的值将是相同的,但1,2,3等的级数看起来更自然,左移表达式更明确地表示位掩码。很明显,对于每个值,只设置了一个位,对于每个下一个值,该位向左移动一步。也很难出错,因为每次加1比将增长的十进制数加倍容易。我以前从来没有见过这种宣布国旗的方式,但我喜欢它,我会采用它。
标志和经典枚举的核心区别在于枚举仅包含一个值:A、B或C虽然标记用于保存一组值:A、B、C、AB、AC、BC或ABC。
您可以在这里阅读:MSDN