定義
enumにSystem.Flags Attributeを付加することで、enum型をビットフラグとして扱うことができます。
↓の書き方ではシフト演算子を使っていますが、直接2の乗数を入れても問題ないです。
普通のenumの場合は、例えばRedとBlueの両方をタイプであることを示したいときにRedAndBlueみたいな感じのタイプを新しく定義したりする必要がありそうですが、ビットフラグをつかえば複数の状態を簡単に扱えます。
[System.Flags] public enum ColorType { None = 0, Red = 1 << 0, // 1を左に0シフト つまり1 Blue = 1 << 1, // 1を左に1シフト つまり2 Green = 1 << 2, // 1を左に2シフト つまり4 Yellow = 1 << 3, // 1を左に3シフト つまり8 }
使い方
先ほど定義したColorType型の変数に対して、以下のような感じでフラグを立てたり折ったりできます。
void Test() { // OR演算でフラグをたてる m_colorType |= ColorType.Red; // Redを追加 m_colorType |= ColorType.Blue; // Blueを追加 // AND NOT演算でフラグを折る m_colorType &= ~ColorType.Red; // HasFlagメソッドで指定のフラグが立っているかどうかを確認 if (m_colorType.HasFlag(ColorType.Blue)) { } }