【必须知道】Enum_Flags

[Flags]二进制

enum AnyThings{枚举

A=1,

B=2,

C=4,

D=8

}

 

枚举赋值必须是2^n才能够,目的是实现他们的二进制表示中的 1 ,不要重叠,如 1=0001   2=0010  4=0100,因此他们或运算: 1|2|4=0111 

 

在取值的时候,直接用 enm&AnyThings.A==AnyThings.A 就能够判断是否是包含这个值,由于: 0111 & 0010 = 0010 ,可是若是你的枚举中,存在一个 3 或者6之类的,他们的二进制表示是 0011和0110,那么他们再和 1|2|4进行 与 计算的时候,也会返回自身,因此就不对了(由于1|2|4并不包含3和6),这就是为啥一开始要把他们设置为2^n的缘由。

 

若是想删除其中一项怎么办?  直接enm ^ AnyThings.A ,就能够把AnyThings.A取消了,如 1|2|4=0111, 0111^0010 = 0101=1|4,把 2 删除了

相关文章
相关标签/搜索