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.