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 8 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.