枚举,相信大家都非常熟悉:

public enum Permission
{

View = 1,
Create = 2,
Edit = 3,
Delete = 4

}

但是如果想使用 按位与/按位或 运算的话,就不能这样定义了。

应该要这样定义:

[Flags]
public enum Permission
{

View = 1,
Create = 2,
Edit = 4,
Delete = 8

}

Flags 可写可不写,建议还是写一下比较规范。

必需要保证,任意两个或多个相加的值,不会出现在已定义的值中,最简单的公式:当前值=上一个值 * 2。(2进制嘛)。

怎么用呢?看以下代码:

Permission p = Permission.View | Permission.Create;
//p 包含 View 也包含 Create 以下验证
if ((p & Permission.View) == Permission.View)
{//成立

Console.WriteLine(“It has View”);

}
if ((p & Permission.Create) == Permission.Create)
{//成立

Console.WriteLine(“It has Create”);

}

这么写好像有点麻烦,C# 4.0 以后有了 “HasFlag” 可以这么写了:

Permission p = Permission.View | Permission.Create;
//p 包含 View 也包含 Create 以下验证
if (p.HasFlag(Permission.View))
{

Console.WriteLine(“It has View”);

}
if (p.HasFlag(Permission.Create))
{

Console.WriteLine(“It has Create”);

}