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 | CA1066 |
| Titel | IEquatable implementeren wanneer je Equals overschrijft |
| Categorie | Ontwerpen |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Een waardetype (struct) overschrijft Equals methode, maar implementeert niet IEquatable<T>.
Beschrijving van regel
Een methode voor het overschrijven Equals van een waardetype geeft aan dat het ondersteuning biedt voor het vergelijken van twee exemplaren van het type voor gelijkheid van waarden. Overweeg de IEquatable<T> interface te implementeren om sterk getypeerde testen voor gelijkheid te ondersteunen. Dit zorgt ervoor dat oproepers die gelijkheidscontroles uitvoeren de sterk getypte System.IEquatable<T>.Equals-methode aanroepen en voorkomen dat het argument wordt geboxed, waardoor de prestaties verbeteren. Zie Notities voor implementeerfuncties voor meer informatie.
Uw System.IEquatable<T>.Equals implementatie moet resultaten retourneren die consistent zijn met Equals.
Hoe schendingen op te lossen
Als u een schending wilt herstellen, implementeer IEquatable<T> en werk Equals bij om deze geïmplementeerde methode aan te roepen. In de volgende twee codefragmenten ziet u bijvoorbeeld een schending van de regel en hoe u deze kunt oplossen:
public struct S
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && _value == otherS._value;
}
using System;
public struct S : IEquatable<S>
{
private readonly int _value;
public S(int f)
{
_value = f;
}
public override int GetHashCode()
=> _value.GetHashCode();
public override bool Equals(object other)
=> other is S otherS && Equals(otherS);
public bool Equals(S other)
=> _value == other._value;
}
Wanneer waarschuwingen onderdrukken
Het is veilig om schendingen van deze regel te onderdrukken als het ontwerp en de prestaties van de implementatie van de interface niet essentieel zijn.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA1066
// The code that's violating the rule is on this line.
#pragma warning restore CA1066
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA1066.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.