CA2248: 正しい enum 引数を Enum.HasFlag に指定します

プロパティ
ルール ID CA2248
Title 正しい enum 引数を Enum.HasFlag に指定します
[カテゴリ] 使用方法
修正が中断ありか中断なしか なし
.NET 8 では既定で有効 提案として

原因

HasFlag メソッドに引数として渡された列挙型が呼び出し元の列挙型と異なります。

規則の説明

Enum.HasFlag メソッドでは、メソッドが呼び出されるインスタンスと同じ enum 型になることが enum 引数に求められます。 異なる enum 型が存在する場合、ハンドルされない例外がランタイム時にスローされます。

違反の修正方法

違反を修正するには、引数と呼び出し元の両方で同じ enum 型を使用します。

public class C
{
    [Flags]
    public enum MyEnum { A, B, }

    [Flags]
    public enum OtherEnum { A, }

    public void Method(MyEnum m)
    {
        m.HasFlag(OtherEnum.A); // Enum types are different, this call will cause an `ArgumentException` to be thrown at run time

        m.HasFlag(MyEnum.A); // Valid call
    }
}

どのようなときに警告を抑制するか

この規則からは違反を抑制しないでください。