CA1067: Přepište metodu Equals při implementaci IEquatable

Vlastnost Hodnota
ID pravidla CA1067
Název Při implementaci IEquatable přepište Equals.
Kategorie Návrh
Oprava, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

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

Popis pravidla

Typ implementující rozhraní IEquatable<T> znamená, že podporuje porovnávání dvou instancí typu z hlediska rovnosti. Měli byste také přepsat implementace metod Equals a GetHashCode() základní třídy tak, aby jejich chování bylo v souladu s implementací System.IEquatable<T>.Equals . Další informace naleznete v poznámkách implementátorů.

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

Jak opravit porušení

Chcete-li opravit porušení, přepište Equals a implementujte jej zavoláním implementace System.IEquatable<T>.Equals. 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é