반응형
ReSharper GetHashCode 대체에 '397'이 사용되는 이유는 무엇입니까?
다른 많은 사람들과 마찬가지로 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에 대해서는 특별히 특별한 것은 없습니다.
Ben은 맞습니다. Assembly를 반영하면 사용하기로 선택한 소수입니다.
resharper가 사용하는 해시 는 FNV 해시 의 변형처럼 보입니다 . FNV는 종종 다른 소수로 구현됩니다. FNV의 적절한 소수 선택에 대한 토론이 여기에 있습니다 .
참고 URL : https://stackoverflow.com/questions/102742/why-is-397-used-for-resharper-gethashcode-override
반응형
'IT' 카테고리의 다른 글
VB.NET에서 어떻게 캐스팅해야합니까? (0) | 2020.06.18 |
---|---|
하나의 열에 대해서만 DISTINCT (0) | 2020.06.18 |
부트 스트랩 응답 성있는 텍스트 크기 (0) | 2020.06.18 |
Lisp에 관한 Paul Graham의 요점을 설명하십시오 (0) | 2020.06.18 |
IIS7에서 응용 프로그램 풀 유휴 시간 초과를 비활성화하는 방법은 무엇입니까? (0) | 2020.06.18 |