如何使用FlagsAttribute

时间:2013-04-18 14:47:50

标签: c# enums

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

[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。这是怎么回事?

2 个答案:

答案 0 :(得分:6)

在枚举中定义组合没有任何问题,以便让枚举用户的生活更轻松。也就是说,这可能是一个短视的决定(不灵活且难以理解的代码)决定省略构成组合的各种2选项权。

答案 1 :(得分:5)

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

  

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