¿Por qué se usa '397' para el reemplazo de ReSharper GetHashCode?

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 gen que produce para GetHashCode () se ve así:

<code>    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;
        }
    }
</code>

Por supuesto, tengo algunos de mis propios miembros allí, pero lo que quiero saber es ¿por qué 397?

EDIT: Entonces, mi pregunta estaría mejor redactada ya que, ¿hay algo "especial" en que el número primo 397 fuera de él sea un número primo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta