quiero usar un objeto personalizado como una clave de diccionario, sobre todo, tengo algo como esto: (No puedo usar .NET 4.0, así que no tengo tuplas)uso como objeto personalizado Diccionario Clave
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>);
}
}
Luego hago algo como esto.
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)];
Aparece la excepción KeyNotFound en la última línea. Por qué es esto ? ¿No es suficiente que implemente IEquatable?
Gracias
¿dónde está tu get hash code implementation? si pone un igual, siempre debe tener un código hash get – Manatherin
Su código le da una advertencia, y por una razón. Cuando corrija esa advertencia, recibirá otra advertencia, y cuando corrija eso, su código funcionará. Nunca ignore las advertencias. –
Podría haber visto: [using-an-object-as-a-generic-dictionary-key-in-net] (http: // stackoverflow.com/questions/634826/using-an-object-as-a-generic-dictionary-key-in-net) – nawfal