C#idiomatic C#
ca2248fundamentals/code-analysis/quality-rules

Code analysis

CA2248: Provide correct enum argument to Enum.HasFlag

Learn about code analysis rule CA2248: Provide correct enum argument to Enum.HasFlag

CA2248 Usage enabled by default in .NET 10: As suggestion
Fix is breaking or non-breaking Non-breakingApplicable languages C# and Visual Basic

Cause

The enum type passed as an argument to the HasFlag method call is different from the calling enum type.

Rule description

The Enum.HasFlag method expects the enum argument to be of the same enum type as the instance on which the method is invoked. If these are different enum types, an unhandled exception will be thrown at runtime.

How to fix violations

To fix violations, use the same enum type on both the argument and the caller:

csharp
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 runtime

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

When to suppress warnings

Do not suppress violations from this rule.