CA2248: Geben Sie das richtige enum-Argument für „Enum.HasFlag“ an.

Eigenschaft Wert
Regel-ID CA2248
Titel Geben Sie das richtige enum-Argument für „Enum.HasFlag“ an.
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Vorschlag

Ursache

Der Enumerationstyp, der als Argument an den HasFlag-Methodenaufruf übergeben wird, unterscheidet sich vom aufrufenden Enumerationstyp.

Regelbeschreibung

Bei der Enum.HasFlag-Methode muss das enum-Argument denselben enum-Typ haben wie die Instanz, auf der die Methode aufgerufen wird. Wenn es sich um unterschiedliche enum-Typen handelt, wird während der Laufzeit ein Ausnahmefehler ausgelöst.

Behandeln von Verstößen

Um Verstöße zu beheben, verwenden Sie sowohl für das Argument als auch für den Aufrufer denselben Enumerationstyp:

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

Wann sollten Warnungen unterdrückt werden?

Verstöße gegen diese Regel dürfen nicht unterdrückt werden.