4
LINQ 고유 표현식에 대해 EqualityComparer를 쓰고 있는데 GetHashCode 오버로드 메서드에 대해 확신하지 못했습니다. 아래의 코드가 정확합니까? Id 속성은 긴 프리미티브입니다.긴 프리미티브 용 GetHashCode()
public int GetHashCode(Deal obj)
{
return ((int)obj.Id)^((int)(obj.Id >> 32)); ;
}
답변은 '평등'방법에서 비교 대상에 따라 다릅니다. 왜 그냥'obj.Id.GetHashCode()'를 반환하지 않는가? –
나는 Equals 메서드에 대해 == 연산자와 비교 중이다. 내 컨텍스트에서 해시 코드가 실제로 필요한 것은 아니지만 정밀도가 떨어지기 때문에 긴 프리미티브에 대한 설명을 얻기를 바랬습니다. – yulun
무엇을'=='와 비교합니까? 'Id'? 그렇다면'obj.Id.GetHashCode()'가 더 간단 할지라도 괜찮습니다. 제 요점은'GetHashCode'와'Equals'가'IEqualityComparer'계약의 일부로 만족해야만하는 불변의 것들이 있다는 것입니다. 특히'GetHashCode (x)! = GetHashCode (y)'는'Equals (x, y)'가 거짓이라는 것을 암시합니다. LINQ'Distinct' 메서드는 둘 모두 올바르게 구현되어야합니다. 관심이있는 경우 Eric Lippert는 다음과 같은 철저한 지침을 제공합니다. http://blogs.msdn.com/b/ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx –