当用 Flags 属性装饰时,你可以做你正在做的事情,这非常好。CLR 告诉你分配给枚举实例的值是管理员或经理......这就是垂直管道is,按位或运算符。
来自msdn页面msdn Flags Attribute
"考虑创建一个枚举
常用标志的常量
组合。例如,如果您有
用于文件 I/O 的枚举
包含的操作
枚举常量 Read = 1 和
写 = 2,考虑创建
枚举常量 ReadWrite = Read
OR Write,它结合了读取和
写标志。此外,按位
用于组合标志的 OR 操作
可能被认为是先进的
在某些情况下的概念
不应该要求简单
任务。”
您可以像下面这样轻松地声明枚举:
[Flags]public enum PermissionLevel
{
User = 1,
Administrator = 2,
ITStaff = User | Administrator,
Manager = 4,
SuperAdministrator = Administrator | Manager ,
}
哦,顺便说一句,始终包含 None 值被认为是一种好习惯...
[Flags]public enum PermissionLevel
{
None = 0,
User = 1,
Administrator = 2,
ITStaff = User | Administrator,
Manager = 4,
SuperAdministrator = Administrator | Manager ,
}
此技术非常有用,因为它允许客户端代码使用简洁表达实际业务意图的语法针对单个值的子集测试候选值...假设 candValue 是核心单个值之一...
if ((candValue & PermissionLevel.SuperAdministrator) == candVal)
// tests to see if candValue is Administrator Or Manager
如果您无权访问代表 SuperAdministrator 位掩码 = 00000110 的枚举值,则需要进行 2 次比较