CA1066: Implementace IEquatable při přepsání Equals
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1066 |
Název | Při přepisu Equals implementujte IEquatable. |
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 8 | No |
Příčina
Typ hodnoty (struktura) přepisuje Equals metodu, ale neimplementuje IEquatable<T>.
Popis pravidla
Metoda přepsání Equals typu hodnoty označuje, že podporuje porovnávání dvou instancí typu pro rovnost hodnot. Zvažte implementaci IEquatable<T> rozhraní pro podporu testů silného typu pro rovnost. Tím se zajistí, že volající provádějící kontroly rovnosti vyvolá metodu silného typu System.IEquatable<T>.Equals a zabrání boxování argumentu a zlepší výkon. Další informace najdete tady.
Vaše System.IEquatable<T>.Equals implementace by měla vrátit výsledky, které jsou konzistentní s Equals.
Jak opravit porušení
Chcete-li opravit porušení, implementujte IEquatable<T> a aktualizujte Equals přepsání pro vyvolání této implementované metody. Například následující dva fragmenty kódu ukazují porušení pravidla a postup jeho opravy:
public struct S
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && _value == otherS._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && Equals(otherS);
public bool Equals(S other)
=> _value == other._value;
}
Kdy potlačit upozornění
Je bezpečné potlačit porušení tohoto pravidla, pokud návrh a výkon výhody implementace rozhraní nejsou kritické.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1066
// The code that's violating the rule is on this line.
#pragma warning restore CA1066
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1066.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.