Я хочу использовать пользовательский объект в качестве ключа словаря, в основном, у меня есть что-то вроде этого: (я не могу использовать .net 4.0, поэтому у меня нет кортежей)
class Tuple<A, B> : IEquatable<Tuple<A,B>>
{
public A AValue { get; set; }
public B BValue { get; set; }
public Tuple(A a, B b){ AValue = a; BValue = b; }
public bool Equals(Tuple<A, B> tuple)
{
return tuple.AValue.Equals(AValue) && tuple.BValue.Equals(BValue);
}
public bool Equals(object o)
{
return this.Equals(o as Tuple<A,B>);
}
}
Затем я делаю что-то вроде этого.
var boolmap = new Dictionary<Tuple<bool, bool>, string>();
boolmap.Add(new Tuple<bool,bool>(true, true), "A");
boolmap.Add(new Tuple<bool,bool>(true, false), "B");
boolmap.Add(new Tuple<bool,bool>(false, true), "C");
boolmap.Add(new Tuple<bool,bool>(false, false), "D");
var str = boolmap[new Tuple<bool,bool>(true, false)];
Я получаю исключение KeyNotFound в последней строке. Почему это? Не достаточно ли реализовать IEquatable?
Спасибо