CA1067: „Object.Equals(object)“ bei Implementierung von „IEquatable“ außer Kraft setzen

Eigenschaft Wert
Regel-ID CA1067
Titel „Object.Equals(object)“ bei Implementierung von „IEquatable“ außer Kraft setzen
Kategorie Design
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 9 aktiviert Als Vorschlag

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. Ausführlichere Informationen finden Sie hier.

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

Behandeln von Verstößen

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.

Weitere Informationen