【C#】複数のフラグを確認する
例えば フラグ判定で、そのビットが立っているかどうかを判定する際に 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)