Podobnie jak wielu z was, używam ReSharper, aby przyspieszyć proces tworzenia. Kiedy używasz go do przesłonięcia członków równości klasy, kod-gen, który tworzy dla GetHashCode () wygląda następująco:
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;
}
}
Oczywiście mam tam kilku swoich członków, ale chcę wiedzieć, dlaczego 397?
- EDYCJA: Więc moje pytanie byłoby lepiej sformułowane, ponieważ czy jest coś „specjalnego” w liczbie pierwszej 397 poza tym, że jest liczbą pierwszą?
hash
resharper
hash-code-uniqueness
programista
źródło
źródło
Hash, którego używa resharper, wygląda jak wariant skrótu FNV . FNV jest często implementowane z różnymi liczbami pierwszymi. Dyskusja na temat właściwego doboru liczb pierwszych dla FNV jest tutaj .
źródło