【必須知道】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 刪除了

相關文章
相關標籤/搜索