2

別のセット内で使用するたびにとしてHashSet<Point>使用するようにサブクラス化したい。HashSet<Point>.CreateSetComparer()IEqualityComparer

基本的に私はこれを行うたびに:

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

私はそれを自動的に次のように扱いたい:

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

この質問のとおりです。

現在、次のように手動でこれを行っています。

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

しかし、それはちょっと醜いです。私が見逃している簡単な方法はありますか?

4

1 に答える 1

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();
    }
于 2013-12-24T04:02:53.197 に答える