2009-08-21 4 views
0

myclass라는 클래스가 있다고 가정 해 보겠습니다.해시 및 모든 멤버가 동일한 클래스의 다른 인스턴스

내 코드에는 myclass, myclass1 및 myclass2의 두 인스턴스가 있습니다. 그들에 관한 모든 것이 (공개 및 비공개) 속성이 동일합니다.

둘 다 HashSet에 추가하려고하면 두 개 또는 모두를 추가합니까? 둘 다 추가하고 싶지 않지만 myclass 정의에서 equals를 대체 할 수 있습니까? HasSet이이를 사용하는 방법을 알고 있습니까?

답변

2

간단한 대답은 객체의 Equals 메서드에 따라 다릅니다.

긴 대답 :

HashSet의 두 객체가 동일한 경우는 결정하는 IEqualityComparer를 사용합니다. 제공하지 않으면 EqualityComparer.Default; 그것은 사실 object.Equals (a, b)와 복싱 값 유형을 피하기위한 몇 가지 요소를 사용합니다.

object.Equals(a, b)에 대한 문서 확인 : null을 확인한 후에 효과적으로 a.Equals(b)을 수행합니다.

object.Equals(other)의 기본 구현은 참조 평등 만 확인하는 것입니다 (즉, 객체의 인스턴스가 똑같습니다). ID 필드가 동일한 지 확인하는 등 원하는 검사를 수행하기 위해이를 대체 할 수 있습니다 . 참고로 Equals를 재정의 할 때는 GetHashCode를 재정의해야합니다.

HashSet이 개체의 정의를 변경하지 않고 동일성을 결정하는 방법을 변경하려면 대신 사용자 지정 IEqualityComparer를 제공 할 수 있습니다.