2010-12-16 25 views
15

¿Por qué GetHashCode() devuelve un valor diferente para la misma cadena? No puedo describir cómo duplicar esto, pero confía en que esto no es una broma y que las dos siguientes líneas de vino de mi ventana de inspección en dos momentos distintos:String.GetHashCode() devuelve valores diferentes

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int 
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int 

¿Cómo pudo suceder esto?

No sé si esto ayuda, pero me estoy ejecutando en .NET 4.0 en VS 2010 y estoy depurando una aplicación NServiceBus.

Actualización:

Si usted quiere saber lo que terminé haciendo de este vistazo a este tema: Can you generate an x86 hash value when running in x64 mode?

Respuesta

11

Según documentation:

Si dos objetos de cadena son iguales , el método GetHashCode devuelve valores idénticos. Sin embargo, no hay un valor único de código hash para cada valor de cadena único. Diferentes cadenas pueden devolver el mismo código hash.

Por lo tanto, debe haber algún otro efecto para que las dos llamadas den diferentes resultados. Una teoría es que cambiaste las plataformas entre las llamadas, de x86 a x64 o viceversa.

+4

Sí, tienes razón. Lo he confirmado creando un programa de consola y llamando a Console.WriteLine ("DDD.Events.Application.ApplicationReferenceCreated" .GetHashCode()). Luego cambio la plataforma y la ejecuto nuevamente. Los valores devueltos son los valores que mencioné anteriormente. –

+1

Cool. Aprendí algo nuevo aquí :) –

+0

Confirmo que tuve el mismo problema al crear el código hash de una prueba unitaria y luego compararlos en mi aplicación principal. –

Cuestiones relacionadas