我有一個類,它看起來像這樣:問題有關字典<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
}
此類包含值的neumerical範圍。這個類還應該能夠保持默認範圍,其中LowerLimit和UpperLimit都等於Double.NaN。
現在這個類進入一個字典
的解釋工作正常,「非南的數值範圍值,但當關鍵是{NaN的不同,NaN} NumericalRange對象,那麼字典拋出一個KeyNotFoundException。
我在做什麼錯?是否還有其他需要實現的接口?
你還重寫GetHashCode和equals(OBJ)? – Rauhotz 2009-06-08 06:52:02
不需要這些覆蓋?如果是這樣,你如何實現GetHashCode? – ashwnacharya 2009-06-08 06:57:16
見:http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c/371348#371348 – 2009-06-08 07:02:24