Sdílet prostřednictvím


CA1067: Přepsání rovná se při implementaci IEquatable

Vlastnost Hodnota
ID pravidla CA1067
Název Při implementaci IEquatable přepište Equals.
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 9 Jako návrh

Příčina

Typ implementuje IEquatable<T>, ale nepřepíše Equals metodu.

Popis pravidla

Implementování IEquatable<T> typu rozhraní označuje, že podporuje porovnávání dvou instancí typu pro rovnost. Měli byste také přepsat implementace Equals základních tříd a GetHashCode() metod tak, aby jejich chování bylo konzistentní s implementací System.IEquatable<T>.Equals . Další podrobnosti najdete tady.

Vaše Equals implementace by měla vrátit výsledky, které jsou konzistentní s System.IEquatable<T>.Equals implementací.

Jak opravit porušení

Pokud chcete opravit porušení, přepište Equals ho System.IEquatable<T>.Equals a implementujte vyvoláním implementace. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:

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();
}

Kdy potlačit upozornění

Nepotlačujte porušení tohoto pravidla.

Viz také