¿Por qué se utiliza '397' para anular GetHashCode de ReSharper?
-
01-07-2019 - |
Pregunta
Como muchos de ustedes, uso ReSharper para acelerar el proceso de desarrollo.Cuando lo usas para anular los miembros de igualdad de una clase, el código generado que produce para GetHashCode() se ve así:
public override int GetHashCode()
{
unchecked
{
int result = (Key != null ? Key.GetHashCode() : 0);
result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
result = (result * 397) ^ ObjectId;
return result;
}
}
Por supuesto, tengo algunos de mis propios miembros allí, pero lo que quiero saber es ¿por qué 397?
- EDITAR:Entonces, mi pregunta estaría mejor redactada como: ¿hay algo "especial" en el número primo 397 además de ser un número primo?
Solución
Probablemente porque 397 es un número primo de tamaño suficiente para hacer que la variable de resultado se desborde y mezcle un poco los bits del hash, proporcionando una mejor distribución de los códigos hash.No hay nada particularmente especial en 397 que lo distinga de otros primos de la misma magnitud.
Otros consejos
Ben tiene razón, reflejando la Asamblea se puede ver que es solo un número primo que han elegido usar.