Gestion des valeurs nulles lors de la surcharge de l'opérateur ==
Dans certains cas, essayer de surcharger l'opérateur == avec le code suivant peut entraîner une récursivité infinie :
<code class="language-c#">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { return foo1 == null ? foo2 == null : foo1.Equals(foo2); }</code>
Le problème est que sans vérification spécifique des valeurs nulles, la comparaison == appelle récursivement la méthode surchargée de l'opérateur == pour comparer foo1 et foo2. Puisque foo1 est vide, une boucle récursive est déclenchée.
Pour résoudre ce problème, vous pouvez utiliser ReferenceEquals
pour ajouter une vérification de valeur nulle :
<code class="language-c#">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(null, foo1)) return object.ReferenceEquals(null, foo2); return foo1.Equals(foo2); }</code>
En utilisant ReferenceEquals
pour vérifier les valeurs nulles, vous vous assurez que la méthode surchargée de l'opérateur == ne se reproduit pas indéfiniment, permettant ainsi de gérer les comparaisons nulles avec élégance.
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!