CA1067: Nadpisz metodę Equals podczas implementacji interfejsu IEquatable

Właściwości Wartość
Identyfikator reguły CA1067
Tytuł Przesłoń metodę Equals podczas implementowania interfejsu IEquatable
Kategoria Projektowanie
Poprawka łamiąca lub nienaruszająca Niezgodność
Domyślnie włączone na platformie .NET 10 Jako sugestia
Zastosowane języki C# i Visual Basic

Przyczyna

Typ implementuje metodę IEquatable<T>, ale nie zastępuje Equals metody.

Opis reguły

Typ implementujący interfejs IEquatable<T> wskazuje, że umożliwia porównywanie dwóch wystąpień typu, aby sprawdzić, czy są równe. 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 . Aby uzyskać więcej informacji, zobacz Uwagi dotyczące implementatorów.

Implementacja Equals powinna zwracać wyniki zgodne z implementacją System.IEquatable<T>.Equals .

Jak naprawić naruszenia

Aby naprawić naruszenie, przesłoń Equals i zaimplementuj go, 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 ukrywaj naruszeń tej reguły.

Zobacz też