Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| 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.