Share via


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 8 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.

Se även