CA1067: Åsidosätt Equals-metoden när du implementerar IEquatable-gränssnittet

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.

Se även