我一直在试图找出为什么这两个操作返回不同的值:
Double.NaN == Double.NaN
返回false
Double.NaN.Equals(Double.NaN)
返回true
我有 answer到第一部分而不是第二部分而不是“为什么这两个比较返回不同的值”
最佳答案
差异的原因很简单,即使不是很明显。
如果使用相等运算符 ==
,那么您正在使用 IEEE 测试是否相等。
如果您使用的是 Equals(object)
方法,那么你必须维护object.Equals(object)
的合约.当您实现此方法(以及相应的 GetHashCode
方法)时,您必须维护该契约,这与 IEEE 行为不同。
如果Equals
合约没有得到维护,那么哈希表的行为就会崩溃。
var map = new Dictionary<double,string>();
map[double.NaN] = "NaN";
var s = map[double.NaN];
如果!double.NaN.Equals(double.NaN)
,你永远无法从字典中找到你的值(value)!
如果前面的句子没有意义,那么请理解哈希机制(用于 Dictionary<T,U>
、 HashSet<T>
等)同时使用 object.Equals(object)
和 object.GetHashCode()
广泛的方法,并依赖于对其行为的保证。
关于c# - 将 Double.NaN 与自身进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458890/