Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.