CA2248: Proporcionar el argumento enum correcto para Enum.HasFlag

Propiedad Value
Identificador de la regla CA2248
Título Proporcionar el argumento enum correcto para Enum.HasFlag
Categoría Uso
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

El tipo de enumeración que se pasa como argumento a la llamada de método HasFlag es diferente del tipo de enumeración que realiza la llamada.

Descripción de la regla

El método Enum.HasFlag espera que el argumento enum sea del mismo tipo enum que la instancia en la que se invoca el método. Si se trata de tipos enum diferentes, se producirá una excepción no controlada en tiempo de ejecución.

Cómo corregir infracciones

Para corregir las infracciones, use el mismo tipo de enumeración en el argumento y el autor de la llamada:

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
    }
}

Cuándo suprimir las advertencias

No suprima las infracciones de esta regla.