前往
大廳
主題

C# Enum Flags 二進制宣告

伶乃 | 2021-11-04 15:31:36 | 巴幣 112 | 人氣 515

最近因為需求要使用到Enum Flags,不過爬文都爬不到之前寫的那種宣告方式,只好翻之前的專案來看,所以來記一下筆記
Enum Flags使用二進制的方式,可以同時賦予多個值,用來做條件判定的時候非常好用

網路上的寫法大多是
[Flags]
public enum Condition {
    none = 0,
    condition1 = 1,
    condition2 = 2,
    condition3 = 4,
    condition4 = 8,
    condition5 = 16
}

不過缺點就是需要自己去換算二進制,不夠直觀
另一種寫法是
[Flags]
public enum Condition {
    none = 1 << 0,
    condition1 = 1 << 1,
    condition2 = 1 << 2,
    condition3 = 1 << 3,
    condition4 = 1 << 4,
    condition5 = 1 << 5
}

使用移位符就可以依序填上0,1,2,3....,個人比較喜歡這種寫法
至於判斷 playerCondition(玩家的條件)是否符合 requireCondition(要求條件)的寫法如下
if(playerCondition & requireCondition == requireCondition)

這個狀況下玩家的擁有條件可以多於要求條件,但要求條件必須 完全符合 才會判定為True
另一種狀況是玩家只會達成一種條件,而要求條件中只要 有一個符合 就可以了的話,寫法就會變成
if(playerCondition & requireCondition == playerCondition )
差別只在等號後的判斷

不過如果玩家一次只能擁有一種條件的話,感覺用Enum的方式比較不會有不安全的情況產生,但目前還沒有其他比較好的做法所以還是先使用Enum Flag,如果未來有其他方式會再來補充。

創作回應

更多創作