例えば フラグ判定で、そのビットが立っているかどうかを判定する際に HasFlag
を利用する
[Flags] public enum Test { A = 1, B = 2, } private void Main() { var flag = Test.A; flag.HasFlag(Test.A); }
しかし 複数のフラグを判定する場合は HasFlag
を必要分だけ記述する必要がある
[Flags] public enum Test { A = 1, B = 2, C = 4, } private void Main() { var flag = Test.A | Test.B; if () { } }
それだと面倒なので、まとめて判定をできるような拡張メソッドを作成
using System; public static class EnumExtension { public static bool HasFlags(this Enum self, params Enum[] flags) { foreach (var flag in flags) if (self.HasFlag(flag)) return true; return false; } }
これを使うと 下記のように変換でき数が多くても長くならない
flag.HasFlag(Test.A) || flag.HasFlag(Test.B) ↓ flag.HasFlags(Test.A, Test.B)