CA1067: Remplacer Equals lors de l’implémentation d’IEquatable
Propriété | Value |
---|---|
Identificateur de la règle | CA1067 |
Titre | Remplacer Equals lors de l’implémentation d’IEquatable |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | À titre de suggestion |
Cause
Un type implémente IEquatable<T>, mais ne remplace pas la méthode Equals.
Description de la règle
Un type implémentant l’interface IEquatable<T> indique qu’il prend en charge la comparaison de deux instances du type pour l’égalité. Vous devez également remplacer les implémentations de classes de base des méthodes Equals et GetHashCode() afin que leur comportement soit cohérent avec celui de l’implémentation de System.IEquatable<T>.Equals. Consultez ce document pour plus d’informations.
Votre implémentation de Equals doit retourner des résultats cohérents avec l’implémentation de System.IEquatable<T>.Equals.
Comment corriger les violations
Pour corriger une violation, remplacez Equals et implémentez-le en appelant l’implémentation System.IEquatable<T>.Equals. Par exemple, les deux extraits de code suivants montrent une violation de la règle et comment la corriger :
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();
}
Quand supprimer les avertissements
Ne supprimez pas les violations de cette règle.