4

我项目的开发人员实现了以下枚举

[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. 他这样做的原因是Details(应该是2)也包括概述(2+1=3)。

我一直认为做这些事情的方法是在枚举中使用 2 的幂,并在枚举之外进行任何 oring 和 anding。这里发生了什么?

4

2 回答 2

6

为了使枚举用户的生活更轻松,在枚举中定义组合并没有错。也就是说,忽略构成组合的各种 2 的幂选项可能是一个短视的决定(不灵活且难以理解的代码)决定。

于 2013-04-18T14:55:08.963 回答
5

Docs建议以 2 的幂定义标记的枚举常量,但没有限制使用任何可能的值定义标记的枚举常量。

以 2 的幂定义枚举常数,即 1、2、4、8 等。这意味着组合枚举常量中的各个标志不重叠。

于 2013-04-18T14:57:14.893 回答