Como muchos de ustedes, uso ReSharper para acelerar el proceso de desarrollo. Cuando lo usa para anular los miembros de igualdad de una clase, el código-gen 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 que tengo algunos de mis propios miembros allí, pero lo que quiero saber es por qué 397?
- EDITAR: Entonces mi pregunta estaría mejor redactada, ¿hay algo 'especial' en que el número primo 397 fuera de él sea un número primo?
hash
resharper
hash-code-uniqueness
programador
fuente
fuente
El hash que usa resharper parece una variante del hash FNV . FNV se implementa frecuentemente con diferentes números primos. Hay un debate sobre la elección apropiada de los números primos para FNV aquí .
fuente