MSDN의 article에는 해시 코드를 유지하지 않아야한다는 명시적인 경고가 있습니다. 동일한 문자열 값이 응용 프로그램 도메인 외부의 동일한 해시 코드에 매핑되는 것은 아닙니다.
두 경우 스트링 객체는 메소드를 GetHashCode 동일한 값을 반환 같다. 그러나 각각 고유 한 문자열 값인 에 대한 고유 한 해시 코드 값은 없습니다. 다른 문자열은 동일한 해시 코드를 반환 할 수 있습니다.
해시 코드 자체의 안정성이 보장되지 않습니다. 의 해시 코드는 .NET Framework 의 단일 버전에 대해 .NET Framework 버전과 (32 비트 및 64 비트) 플랫폼에서 다를 수 있습니다. 어떤 경우에는 애플리케이션에 따라 다를 수도 있습니다. 도메인. 결과
가 해쉬 코드가이 만들어진 어플리케이션 도메인 외부에서 사용되어서는 안들은 은 컬렉션에서 키 필드로서 사용되지 않아야하고, 그들은 이 유지 않을 것.
마지막으로 암호화가 강력한 해시가 필요한 경우 암호화 해시 함수가 반환 한 값 대신 해시 코드를 사용하지 마십시오. 암호화 해시의 경우 System.Security.Cryptography.HashAlgorithm 또는 System.Security.Cryptography.KeyedHashAlgorithm 클래스에서 파생 된 클래스를 사용하십시오.
해시 코드에 대한 자세한 내용은 Object.GetHashCode를 참조하십시오. 테스트에 대한 그래서
, I 좋겠 중 하나 문자열의 GetHashCode는-구현이 올바른지에 의존하거나 만들고 정상 코드 string.GetHashCode를 반환하고 모의 경우로 치환되는 mockable 해시 코드 공급자를 주입 실행중인 테스트.
이
internal interface IHashCodeProvider
{
int ProvideHashCode(string stringValue);
}
더 가벼운 접근 방식이 (가)가 반환하는 함수를 삽입하는 것입니다 : "해시 코드 공급자"로, 나는 주어진 문자열의 해시 코드를 반환하는 방법, 예를 들어이있는 추상 클래스 또는 인터페이스를 의미 코드 예 : Func<string, int>
. 기본 기능은 x => x.GetHashCode()
입니다.