많은 분들처럼 개발 프로세스의 속도를 높이기 위해 ReSharper를 사용합니다. 내가 거기에 내 자신의 회원 중 일부가 물론ReSharper GetHashCode 재정의에 '397'이 사용되는 이유는 무엇입니까?
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;
}
}
, 그러나 나는 무엇을 걸려 : 당신이 클래스의 평등 멤버를 오버라이드 (override)를 사용하는 경우, 것처럼 GetHashCode (위해 생성하는 코드 세대)가 보인다 알기 위해 왜 397입니까?
- 편집 : 그래서 내 질문은 더 좋을 것입니다. 소수 이외의 397 소수에 대해 '특별한'것이 있습니까?
그리고 397이 행복합니다. 우리 모두 행복하게되고 싶지 않아? –
좋아요,하지만 왜 그것이 소수인지, 왜 그 정확한 크기가되어야합니까? 소수가되어야한다면 2 또는 2147483647을 사용해야합니다. 나는이 돌연변이가 좋은 돌연변이를 가질 것이라고 추측한다. 우리는 multiplicator가 상대적으로 동일한 수 또는 0과 1을 가질 필요가 있습니다. 397 = 110001101b가 준수합니다. 크기가 확실하지 않습니다. –
닉이 말했듯이, 특별히 특별한 것은 없습니다. 그것은 그 크기 일 필요는 없습니다. 그것은 해시를 계산할 때 결과가 오버 플로우됩니다 (GetHashCode()가 Int32를 반환하기 때문에)만큼 큰 숫자 일뿐입니다. 프라임을 선택하는 것은 배포에 도움이 될 뿐이며, 수학 학위가 없으므로 설명하지는 않겠지 만 프라임 곱셈은 다른 임의의 수에 의한 곱셈보다 더 잘 분산 된 결과를 갖습니다. –