CA1066 : Implémenter IEquatable au moment de remplacer Equals
Propriété | Value |
---|---|
Identificateur de la règle | CA1066 |
Titre | Implémenter IEquatable au moment de remplacer Equals |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
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. Implémentez 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é appellent la méthode fortement typée System.IEquatable<T>.Equals et évitent de boxer l’argument, ce qui améliore les performances. Vous pourrez trouver plus d’informations ici.
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.
Règles associées
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour