Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Fastighet | Värde |
|---|---|
| Regel-ID | CA1067 |
| Titel | Skriv över Equals när du implementerar IEquatable |
| Kategori | Design |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Som förslag |
| Tillämpliga språk | C# och Visual Basic |
Orsak
En typ implementerar IEquatable<T>, men åsidosätter inte Equals metoden.
Regelbeskrivning
En typ av implementeringsgränssnitt IEquatable<T> anger att det stöder jämförelse av två instanser av typen för likhet. Du bör också åsidosätta grundläggande klassimplementeringar av Equals och GetHashCode() metoder så att deras beteende överensstämmer med implementeringens System.IEquatable<T>.Equals . Mer information finns i Anteckningar till implementerare.
Implementeringen Equals bör returnera resultat som är konsekventa med System.IEquatable<T>.Equals implementeringen.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse, måste du åsidosätta Equals och implementera den genom att anropa System.IEquatable<T>.Equals. Följande två kodfragment visar till exempel ett brott mot regeln och hur du åtgärdar den:
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();
}
När du ska ignorera varningar
Undertryck inte överträdelser av den här regeln.