ReSharper GetHashCode 재정의에 '397'이 사용되는 이유는 무엇입니까?
-
01-07-2019 - |
문제
많은 분들과 마찬가지로 저 역시 개발 프로세스 속도를 높이기 위해 ReSharper를 사용합니다.이를 사용하여 클래스의 동등 멤버를 재정의하는 경우 GetHashCode()에 대해 생성되는 코드 생성은 다음과 같습니다.
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;
}
}
물론 거기에는 내 멤버도 있지만, 내가 알고 싶은 것은 왜 397인가?
- 편집하다:그래서 내 질문은 소수가 아닌 397 소수에 대해 '특별한' 것이 있습니까?
해결책
아마도 397은 결과 변수가 오버플로되고 해시 비트가 어느 정도 혼합되어 해시 코드가 더 잘 분산되도록 하는 충분한 크기의 소수이기 때문일 것입니다.397에는 같은 크기의 다른 소수와 구별되는 특별한 특별한 점이 없습니다.
제휴하지 않습니다 StackOverflow