另外 enum 可以宣告為 Flags 來實現狀態疊加與比對。
宣告為 Flags時enum值會判斷為二進制,可以使用二進制的特性(01)配合
運算元(|、^、&)實現狀態疊加與比對。
因為二進制運算元是以0/1為 false/true 進行比對,所以若不為2的倍數會導致錯誤的結果
若不宣告為[Flags]則結果為單純的數字相加
要比對狀態可使用 &(AND)
if((list & flagList.Friday) == flagList.Friday){
.......................
}
一樣是利用二進制的特性,兩者皆為1才為1,故 (list & flagList.Friday)的結果會等於 flagList.Friday
刪除時可使用 ^(XOR)
if((list & flagList.Friday) == flagList.Friday){
list = list ^ flagList.Friday;
}
記得刪除前先進行比對,否則如果狀態中沒有該值時會變為增加(XOR 兩者相同為否,反之為真)
補充:
使用 enum 時建議給定0的初始值,因為 enum物件建立時值為0,若無設定值為0的選項時,會造成比對不到可對應的值。
但要注意 0 值在使用&比對時會永遠成立。