J'ai une classe qui ressemble à ceci:Question sur le Dictionnaire <T,T>
public class NumericalRange:IEquatable<NumericalRange>
{
public double LowerLimit;
public double UpperLimit;
public NumericalRange(double lower, double upper)
{
LowerLimit = lower;
UpperLimit = upper;
}
public bool DoesLieInRange(double n)
{
if (LowerLimit <= n && n <= UpperLimit)
return true;
else
return false;
}
#region IEquatable<NumericalRange> Members
public bool Equals(NumericalRange other)
{
if (Double.IsNaN(this.LowerLimit)&& Double.IsNaN(other.LowerLimit))
{
if (Double.IsNaN(this.UpperLimit) && Double.IsNaN(other.UpperLimit))
{
return true;
}
}
if (this.LowerLimit == other.LowerLimit && this.UpperLimit == other.UpperLimit)
return true;
return false;
}
#endregion
}
Cette classe contient une gamme neumerical de valeurs. Cette classe doit également être capable de contenir une plage par défaut, où LowerLimit et UpperLimit sont égales à Double.NaN.
Maintenant cette classe va dans un dictionnaire
Le dictionnaire fonctionne très bien pour les valeurs de plage numérique "non-NAN, mais quand la clé est {NaN, NaN} objet NumericalRange, le dictionnaire jette un KeyNotFoundException.
Qu'est-ce que je fais mal? Y a-t-il une autre interface que je dois implémenter? En fonction de votre commentaire, vous n'avez pas implémenté GetHashCode.
Avez-vous également remplacé GetHashCode et Equals (obj)? – Rauhotz
Non. Ces remplacements sont-ils nécessaires? Si oui, comment implémentez-vous GetHashCode? – ashwnacharya
Voir: http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c/371348#371348 –