2011-05-31 10 views
6

En el ejemplo this, el cartel ha anulado el método de obtener código hash. Entiendo que esto se ha hecho para proporcionar un mejor valor hash para el objeto devuelto, para reducir el número de colisiones y, por lo tanto, para reducir el número de ocasiones en las que será necesario llamar al Equals().C# Reemplazando el método GetHashCode

lo que me gustaría saber, es cómo se calcula este algoritmo:

return 17 + 31 * CurrentState.GetHashCode() + 31 * Command.GetHashCode(); 

¿Hay alguna razón en particular que los números en cuestión se seleccionaron? ¿Podría simplemente haber escogido mis propios números para ponerlo?

+1

Para información, el compilador MS C# (para anon-types) usa una semilla de '-1134271262', y un multiplicador de' -1521134295'. Solo digo ' –

+0

@MarcGravell: ¿Tiene la fuente para eso? – DeepSpace101

+0

@ DeepSpace101 ILDASM; p –

Respuesta

4

Generalmente debe elegir primos. Esto le ayuda a evitar obtener el mismo valor hash para diferentes parámetros de entrada.

Cuestiones relacionadas