c#入门-位组合枚举

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);//成员管理者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值