Udostępnij za pośrednictwem


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.

Zobacz też