Freigeben über


CA1067: „Equals“ überschreiben, wenn IEquatable implementiert wird

Eigenschaft Wert
Regel-ID CA1067
Titel Equals beim Implementieren von IEquatable überschreiben
Kategorie Entwerfen
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Untrennbar
Standardmäßig in .NET 10 aktiviert Als Vorschlag
Anwendbare Sprachen C# und Visual Basic

Ursache

Ein Typ implementiert IEquatable<T>, setzt aber die Methode Equals nicht außer Kraft.

Regelbeschreibung

Eine Schnittstelle IEquatable<T>, die einen Typ implementiert, gibt an, dass sie den Vergleich zweier Instanzen des Typs auf Gleichheit unterstützt. Sie sollten auch die Basisklassenimplementierungen der Methoden Equals und GetHashCode() außer Kraft setzen, sodass deren Verhalten mit dem der Implementierung System.IEquatable<T>.Equals konsistent ist. Weitere Informationen finden Sie in den Hinweisen zu Implementierungen.

Ihre Implementierung Equals sollte Ergebnisse zurückgeben, die der Implementierung System.IEquatable<T>.Equals entsprechen.

So beheben Sie Verstöße

Setzen Sie zum Korrigieren eines Verstoßes die Equals-Instanz außer Kraft und implementieren Sie diese, indem Sie die Implementierung System.IEquatable<T>.Equals aufrufen. Die folgenden beiden Codeausschnitte zeigen z. B. einen Verstoß gegen die Regel und wie dieser korrigiert werden kann:

using System;

public struct S : IEquatable<S>
{
    private readonly int _value;
    public S(int f)
    {
        _value = f;
    }

    public bool Equals(S other)
        => _value == other._value;
}
using System;

public struct S : IEquatable<S>
{
    private readonly int _value;
    public S(int f)
    {
        _value = f;
    }

    public bool Equals(S other)
        => _value == other._value;

    public override bool Equals(object obj)
        => obj is S objS && Equals(objS);

    public override int GetHashCode()
        => _value.GetHashCode();
}

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie die Verstöße gegen diese Regel nicht.

Siehe auch