CA2248:向 Enum.HasFlag 提供正确的 enum 参数

属性
规则 ID CA2248
标题 向 Enum.HasFlag 提供正确的 enum 参数
类别 使用情况
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用 作为建议

原因

将枚举类型作为参数传递给 HasFlag 方法调用本质上与调用枚举类型不同。

规则说明

Enum.HasFlag 方法要求 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
    }
}

何时禁止显示警告

请勿禁止显示此规则的冲突。