使用自定义对象作为词典键

我想使用自定义对象作为Dictionary键,主要是,我有这样的事情:(我不能使用.net 4.0所以我没有元组)

class Tuple : IEquatable<Tuple> { public A AValue { get; set; } public B BValue { get; set; } public Tuple(A a, B b){ AValue = a; BValue = b; } public bool Equals(Tuple tuple) { return tuple.AValue.Equals(AValue) && tuple.BValue.Equals(BValue); } public bool Equals(object o) { return this.Equals(o as Tuple); } } 

然后我做这样的事情。

  var boolmap = new Dictionary<Tuple, string>(); boolmap.Add(new Tuple(true, true), "A"); boolmap.Add(new Tuple(true, false), "B"); boolmap.Add(new Tuple(false, true), "C"); boolmap.Add(new Tuple(false, false), "D"); var str = boolmap[new Tuple(true, false)]; 

我在最后一行得到一个KeyNotFoundexception。 为什么是这样 ? 我实现IEquatable是不够的?

谢谢

重写Equals方法时需要覆盖GetHashCode 。 可以在这里找到更多解释:

为什么在重写Equals方法时重写GetHashCode很重要?

我只是重写了GetHashCode函数,但似乎即使GetHashCode返回相同的值,也没有发生更新。 拥有Equals ,一切都很有趣和嬉闹