うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【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)