way than strings stringcomparison net greater equalsignorecase diferente best c# .net

c# - than - ¿Cómo String.Equals(a, b) no produce una StackOverflowException?



string.equals c# (2)

Mientras examinaba el operador String == , noté que llama a String.Equals(string a, string b) , lo que significa que es solo un paso.

Al examinar el String.Equals(string a, string b) , veo que realiza una comprobación de igualdad utilizando el operador == . ¿Cómo funciona esto realmente y no causa una StackOverflowException cuando se hace algo como "x" == "x" o "x" == "y" ?

Actualización : se lo hice saber a JetBrains y lo convirtieron en una prioridad crítica para dotPeek. https://youtrack.jetbrains.com/issue/DOTP-6789

También agregué un problema en el repositorio GitHub de ILSpy.


Tu descompilador tiene un error. El código real no verifica a == b , verifica (Object)a == (Object)b , sin pasar por el operador sobrecargado.


Here está el código real de Microsoft. Operador == se implementa a s

public static bool operator == (String a, String b) { return String.Equals(a, b); }

operador == llama a String.Equals que se implementa como:

public static bool Equals(String a, String b) { if ((Object)a==(Object)b) { return true; } if ((Object)a==null || (Object)b==null) { return false; } if (a.Length != b.Length) return false; return EqualsHelper(a, b); }

Como puede ver, la comparación para la igualdad de la cadena se realiza utilizando if ((Object)a==(Object)b) lanzando la cadena al object y luego haciendo la comparación. Entonces esto no llamará al operador sobrecargado == en la clase de cadena.