CA1067: Zastępowanie równości podczas implementowania funkcji IEquatable
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1067 |
Tytuł | Przesłoń metodę Equals podczas implementowania interfejsu IEquatable |
Kategoria | Projekt |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Typ implementuje metodę IEquatable<T>, ale nie zastępuje Equals metody.
Opis reguły
Interfejs implementujący IEquatable<T> typ wskazuje, że obsługuje porównywanie dwóch wystąpień typu pod kątem równości. Należy również zastąpić implementacje klas bazowych Equals i GetHashCode() metod, aby ich zachowanie było zgodne z implementacją System.IEquatable<T>.Equals . Więcej informacji można znaleźć tutaj.
Implementacja Equals powinna zwracać wyniki zgodne z implementacją System.IEquatable<T>.Equals .
Jak naprawić naruszenia
Aby naprawić naruszenie, przesłoń Equals go i zaimplementuj, wywołując implementację System.IEquatable<T>.Equals . Na przykład następujące dwa fragmenty kodu pokazują naruszenie reguły i sposób jego naprawy:
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();
}
Kiedy pomijać ostrzeżenia
Nie pomijaj naruszeń tej reguły.