Comment éviter la récursion infinie lors du traitement de valeurs nulles lors d'une surcharge d'opérateur ?
Lors de la définition de surcharges d'opérateurs de comparaison, il est crucial de gérer correctement les cas nuls pour éviter une récursion infinie. Le code suivant démontre le problème de récursion infinie lors de la surcharge de l'opérateur == :
<code class="language-c#">Foo foo1 = null; Foo foo2 = new Foo(); Assert.IsFalse(foo1 == foo2); public static bool operator ==(Foo foo1, Foo foo2) { if (foo1 == null) return foo2 == null; return foo1.Equals(foo2); }</code>
Dans ce scénario, la surcharge de l'opérateur == s'appelle de manière récursive lorsqu'un de ses opérandes est vide. Pour éviter ce problème, vous devez vérifier explicitement les valeurs nulles à l'aide de la méthode ReferenceEquals
:
<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
, la surcharge vérifie si les deux opérandes sont vides avant de procéder à la comparaison d'égalité. Cela empêche une récursion infinie et garantit un comportement correct dans le cas nul.
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!