Dre*_*kes 32
差异的原因很简单,如果不是很明显的话.
如果使用等于运算符==,那么您将使用IEEE测试进行相等性.
如果你正在使用这种Equals(object)方法,那么你必须保持合同object.Equals(object).实现此方法(以及相应的GetHashCode方法)时,必须维护该合同,这与IEEE行为不同.
如果Equals不支持合同,则哈希表的行为将会中断.
var map = new Dictionary<double,string>();
map[double.NaN] = "NaN";
var s = map[double.NaN];
Run Code Online (Sandbox Code Playgroud)
如果!double.NaN.Equals(double.NaN),你永远不会从字典中获得你的价值!
如果前面的句子没有意义,那么明白,散列的机制(使用Dictionary<T,U>,HashSet<T>等),同时使用object.Equals(object)和object.GetHashCode()方法广泛,并且依靠自己的行为的保证.
在备注部分的最底部Double.Equals,你会发现:
如果通过调用Equals方法测试两个Double.NaN值的相等性,则该方法返回true.但是,如果使用等于运算符测试两个NaN值的相等性,则运算符返回false.如果要确定Double的值是否不是数字(NaN),则可以选择调用IsNaN方法.
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |