如何使用FlagsAttribute

本文关键字:FlagsAttribute 何使用 | 更新日期: 2023-09-27 18:10:04

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

[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的幂,并在枚举之外进行任何上下操作。这是怎么回事?

如何使用FlagsAttribute

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

文档建议以2的幂定义标记的枚举常量,但不限制将标记的枚举常量定义为任何可能的值。

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