我项目的开发人员实现了以下枚举
[Flags]
public enum Permissions
{
Overview = 1,
Detail = 3,
Edit = 7,
Delete = 31,
Block = 39, // Requires Edit = 7, and It's own location = 32. Therefore 7 + 32 = 39.
Unblock = 71, // Requires Edit = 7, and It's own location = 64. Therefore 7 + 64 = 71.
All = int.MaxValue
}
现在,正如你所看到的,他已经制作了Details = 3
。他这样做的原因是细节(应该是2)也包括概述(2 + 1 = 3)。
我一直认为做这些事情的方法是在枚举中使用2的幂,并在枚举之外做任何oring和anding。这是怎么回事?
答案 0 :(得分:6)
在枚举中定义组合没有任何问题,以便让枚举用户的生活更轻松。也就是说,这可能是一个短视的决定(不灵活且难以理解的代码)决定省略构成组合的各种2选项权。
答案 1 :(得分:5)
Docs建议用2的幂来定义标记的枚举常量,但没有限制用任何可能的值定义带标记的枚举常量。
以2的幂为单位定义枚举常量,即1,2,4,8等。这意味着组合枚举常量中的各个标志不会重叠。