2013-01-13 3 views
2

HashSet<Point> 하위 집합으로 사용할 때마다 HashSet<Point>.CreateSetComparer()IEqualityComparer으로 사용합니다. 하위 집합 HashSet 그래서 다른 집합에서 사용할 때 항상 특정 IEqualityComparer를 사용합니다.

기본적 때마다 나는이 작업을 수행 :

var myDict = new Dictionary<HashSet<Point>, Char>(HashSet<Point>.CreateSetComparer()); 

this question 당으로 :

var myDict = new Dictionary<MySubclassOfHashSet, Char>(); 

내가 자동으로 처리합니다.

다음과 같이 나는 현재 수동으로 이런 짓을했는지 :

class MySubclassOfHashSet: HashSet<Point> { 
    public override bool Equals(object obj) { 
     //... 
    } 
    public override int GetHashCode() { 
     //... 
    } 
} 

를하지만 종류의 추한. 제가 누락 된 쉬운 방법이 있습니까?

답변

1
var myDict = new Dictionary<MySubclassOfHashSet<Point>, Char>(); 

    public sealed class MySubclassOfHashSet<T> : HashSet<T>, IEquatable<MySubclassOfHashSet<T>> 
    { 
     public override int GetHashCode() 
     { 
      return Unique.GetHashCode(this); 
     } 
     public bool Equals(MySubclassOfHashSet<T> other) 
     { 
      return Unique.Equals(this, other); 
     } 

     private static readonly IEqualityComparer<HashSet<T>> Unique = HashSet<T>.CreateSetComparer(); 
    }