如何使用FlagsAttribute

Sac*_*nth 4 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
}
Run Code Online (Sandbox Code Playgroud)

现在,正如你所看到的,他已经做了Details = 3.他这样做的原因是细节(应该是2)也包括概述(2 + 1 = 3).

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

Rob*_*evy 6

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


Den*_*nko 5

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

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