Maison >développement back-end >C++ >Comment comparer deux instances d'un type de référence en C# ?
Bonne pratique : Comparaison de deux instances de type référence en C#
Lorsque vous comparez les types de référence, assurez-vous de clarifier le comportement attendu : égalité des valeurs ou identité de référence.
Remplacez l'opérateur d'égalité ("==") et la méthode Equals pour obtenir l'identité de référence
Dans le passé, les développeurs remplaçaient les méthodes "==" et Equals pour vérifier l'identité référentielle. Cependant, les normes de codage déconseillent cette pratique car cela peut conduire à une ambiguïté dans certaines situations.
Option 1 : Implémenter l'interface IEquatable
Pour les types de référence avec une sémantique de valeur (types immuables où l'égalité est traitée comme une égalité), l'approche recommandée consiste à implémenter l'interface System.IEquatable
Exemple :
<code class="language-csharp">class Point : IEquatable<Point> { // ... public bool Equals(Point other) { return X.Equals(other.X) && Y.Equals(other.Y); } // ... }</code>
Option 2 : Utiliser une méthode Equals personnalisée avec vérification de type pour obtenir l'égalité des valeurs
Si vous préférez une méthode Equals personnalisée, assurez-vous qu'elle vérifie à la fois l'égalité des références et le type de l'objet comparé. Cela évite un comportement inattendu lors de la comparaison d’objets de classe dérivée.
Exemple :
<code class="language-csharp">public bool Equals(Point other) { if (other is null) return false; if (other.GetType() != GetType()) return false; return X.Equals(other.X) && Y.Equals(other.Y); }</code>
Quand utiliser l'identité référentielle
N'implémentez pas les opérateurs "==" et "!=" pour les classes de référence qui ne représentent pas des valeurs immuables. Au lieu de cela, comptez sur leur comportement par défaut consistant à comparer les objets pour l'identité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!