CA1067: Override Equals bij het implementeren van IEquatable

Eigenschap Waarde
Regel-id CA1067
Titel Overschrijf Equals bij het implementeren van IEquatable
Categorie Ontwerpen
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Als suggestie
Toepasselijke talen C# en Visual Basic

Oorzaak

Een type implementeert IEquatable<T>, maar overschrijft Equals de methode niet.

Beschrijving van regel

Een type dat de interface IEquatable<T> implementeert geeft aan dat het ondersteuning biedt voor het vergelijken van twee exemplaren van het type op gelijkheid. U moet ook de basisklasse-implementaties van Equals en GetHashCode() methoden overschrijven, zodat hun gedrag consistent is met die van de System.IEquatable<T>.Equals implementatie. Zie Notities voor implementeerfuncties voor meer informatie.

Uw Equals implementatie moet resultaten retourneren die consistent zijn met System.IEquatable<T>.Equals de implementatie.

Hoe schendingen op te lossen

Als u een schending wilt oplossen, overschrijft Equals en implementeert u deze door de System.IEquatable<T>.Equals implementatie aan te roepen. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:

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();
}

Wanneer waarschuwingen onderdrukken

Schendingen van deze regel niet onderdrukken.

Zie ook