Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA1066 |
| Titre | Implémenter IEquatable au moment de remplacer Equals |
| Catégorie | Conception |
| Le correctif a un effet disruptif ou non disruptif | Sans rupture |
| Activé par défaut dans .NET 10 | Non |
| Langues applicables | C# et Visual Basic |
La cause
Un type valeur (struct) substitue la méthode Equals, mais n’implémente pas IEquatable<T>.
Description de la règle
Un type valeur substituant la méthode Equals indique qu’il prend en charge la comparaison de l’égalité des valeurs de deux instances du type. Envisagez d'implémenter l’interface IEquatable<T> pour prendre en charge des tests d’égalité fortement typés. Cela garantit que les appelants qui effectuent des vérifications d’égalité invoquent la méthode fortement typée System.IEquatable<T>.Equals et évitent d'encapsuler l’argument, ce qui améliore les performances. Pour plus d’informations, consultez Remarques sur les implémenteurs.
Votre implémentation de System.IEquatable<T>.Equals doit retourner des résultats cohérents avec Equals.
Comment corriger les violations
Pour corriger une violation, implémentez IEquatable<T> et mettez à jour la substitution Equals de façon à appeler cette méthode implémentée. Par exemple, les deux extraits de code suivants montrent une violation de la règle et comment la corriger :
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;
}
Quand supprimer les avertissements
Vous pouvez sans risque supprimer les violations de cette règle si les avantages en matière de conception et de performances liés à l’implémentation de l’interface ne sont pas critiques.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1066
// The code that's violating the rule is on this line.
#pragma warning restore CA1066
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1066.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.