FlagsAttribute を利用すると Enum をビットフラグとして利用することができる
値は1,2,4... と定義するのは面倒なので、1を何ビットシフトしたかで値を管理する
[System.Flags] public enum Flag { A = 1 << 0, B = 1 << 1, C = 1 << 2, // 全フラグ ALL = 1 << 3 - 1, }
フラグの処理に関しては以下
フラグが立っているか
// 単一フラグ var hasFlag = (bitFlag & Flag.A) == Flag.A; // 複数フラグ var hasFlag = (bitFlag & (Flag.A | Flag.B)) == (Flag.A || Flag.B); // どれかのフラグ var hasFlag = (bitFlag & (Flag.A | Flag.B)) != 0;
フラグを立てる
bitFlag |= Flag.A;
フラグを削除する
bitFlag &= ~Flag.A;