2次幂的数值绑定
你可能见到这种形式的绑定,所有枚举都以二进制下,只有一位是1的绑定方式。
enum 职位
{
创始人 = 0b1,
副首领 = 0b10,
建造师 = 0b100,
宣传师 = 0b1000,
招聘者 = 0b10000,
整治者 = 0b100000,
研究者 = 0b1000000,
}
数值的位运算
这是为了可以把枚举组合起来。
比如一个成员,即有招聘者的权限,又有建造师的权限。那么他的值位是这样的。
职位 a = 职位.招聘者 | 职位.建造师;
数值下的10000(二进制)和100(二进制)进行位或运算,会得到10100(二进制)。
这个值在枚举中是不存在的。那么如何使用呢?
位运算能组合,也能拆分。
if ((a & 职位.建造师) == 职位.建造师)
{
Console.WriteLine("a是建造师");
}
使用位与,可以把其他位上的信息排除掉。然后把拆出来的值和已有的值进行比较。
位枚举特性
在声明位枚举时,添加Flags特性,可以让他在ToString的时候进行分析。
如果这个值在当前枚举中不存在,会拆成二进制的几个枚举组合。
但如果存在,则不会进行这样的分析。
[Flags]
enum 职位
{
创始人 = 0b1,
副首领 = 0b10,
建造师 = 0b100,
宣传师 = 0b1000,
招聘者 = 0b10000,//能拉人
整治者 = 0b100000,//能踢人
研究者 = 0b1000000,
成员管理者 = 0b110000//组合了招聘者和整治者
}
职位 a = 职位.招聘者 | 职位.建造师;
Console.WriteLine(a);//建造师, 招聘者
职位 b = 职位.招聘者 | 职位.整治者;
Console.WriteLine(b);//成员管理者