CA1067: Åsidosätt lika med när du implementerar IEquatable
Property | Värde |
---|---|
Regel-ID | CA1067 |
Title | Åsidosätt lika med vid implementering av IEquatable |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Som förslag |
Orsak
En typ implementerar , men åsidosätter IEquatable<T>Equals inte 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 här.
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 åsidosätter Equals och implementerar du den genom att anropa implementeringen 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.