2010-12-16 1 views
15

GetHashCode()가 같은 문자열에 대해 다른 값을 반환하는 이유는 무엇입니까? 나는이를 복제하는 방법에 대해 설명하지만, 이것은 장난이 아니라는 것을 신뢰하고 다음 두 줄은 두 개의 분리 된 시간에 내 시계 창에서 왔다고 할 수 없습니다 String.GetHashCode()가 다른 값을 반환합니다.

"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() -1386151123 int 
"DDD.Events.Application.ApplicationReferenceCreated".GetHashCode() 1858139950 int 

어떻게 이런 일이 있을까?

이 방법이 도움이되는지 잘 모르겠지만 VS 2010에서 .NET 4.0을 실행 중이고 NServiceBus 응용 프로그램을 디버깅 중입니다.

업데이트 :

당신은 내가이 스레드에서이 Look하고 결국 무엇을 알고 싶은 경우 : Can you generate an x86 hash value when running in x64 mode?

답변

11

따르면 documentation에 :

이 경우에는 문자열 오브젝트가 동일한 GetHashCode 메서드는 동일한 값을 반환합니다. 그러나 고유 한 각 문자열 값에 대해 고유 한 해시 코드 값은 없습니다. 다른 문자열은 동일한 해시 코드를 반환 할 수 있습니다.

따라서 두 가지 호출이 다른 결과를 내기 위해서는 다른 효과가 있어야합니다. 하나의 이론은 플랫폼간에 x86, x64 또는 그 반대로 호출을 전환한다는 것입니다.

+4

네 말이 맞아. 콘솔 프로그램을 만들고 Console.WriteLine ("DDD.Events.Application.ApplicationReferenceCreated".GetHashCode())를 호출하여 확인했습니다. 그런 다음 플랫폼을 변경하고 다시 실행합니다. 반환 된 값은 위에서 언급 한 값입니다. –

+1

차가움. 여기에 새로운 것을 배웠습니다 :) –

+0

유닛 테스트에서 해시 코드를 생성 한 다음 내 주요 애플리케이션에서이를 비교할 때 동일한 문제가 있음을 확인했습니다. –