2017-05-12 16 views
0

C#에서 double 값을 갖고 있다고 가정 해 보겠습니다.GetHashCode()는 다른 정수로 동일한 double 결과를 얻을 수 있습니까?

GetHashCode()이 다른 컴퓨터/창/아키텍처에서이 double에 대해 다른 정수 값을 반환 할 수 있습니까?

public unsafe override int GetHashCode() { 
     double d = m_value; 
     if (d == 0) { 
      // Ensure that 0 and -0 have the same hash code 
      return 0; 
     } 
     long value = *(long*)(&d); 
     return unchecked((int)value)^((int)(value >> 32)); 
    } 
+0

가능하다면? –

+0

GetHashCode의 결과는 구현에 따라 다르므로 원칙적으로 예, 왜 안됩니까? – Pavel

답변

2

Object.GetHashCode Method는 말한다 :

GetHashCode는 메소드의 디폴트의 구현은 다른 개체에 대해 고유 한 반환 값을 보장하지 않습니다. 또한 .NET Framework는 GetHashCode 메서드의 기본 구현을 보장하지 않으며 반환하는 값은 .NET Framework의 여러 버전간에 동일합니다. 결과적으로이 메소드의 기본 구현을 해시를 위해 고유 한 객체 식별자로 사용하면 안됩니다.

+0

고마워요. 매우 도움이됩니다. – Vahid

+0

사실,'double'이'GetHashCode' 구현을 오버라이드하기 때문에 이것은 질문과 관련이 없습니다. 그리고 그렇지 않더라도 - ValueType은 객체의 GetHashCode를 오버라이드합니다 (double은 struct입니다). – Evk

+0

@Evk 그래도 double.GetHashCode()가 서로 다른 두 개의 정수를 반환 할 수 있습니다. 나는 혼란스러워. – Vahid