为什么以下代码段返回1:
double i = double.NaN;
double? i2 = null;
i.CompareTo(i2);
从我的观点来看,没有任何意义。 例外情况会更合适。
您认为决定背后的原因是什么?
答案 0 :(得分:4)
来自CompareTo的文档:
value参数必须为null或Double的实例;除此以外, 抛出异常。 Double的任何实例,不管它是什么 value,被认为大于null。
示例中的value参数为null
。因此NaN
被视为大于null,这就是CompareTo
正确返回1
的原因。
答案 1 :(得分:2)
来自IComparable.CompareTo()
上的MSDN文档:
根据定义,任何对象都比较大于(或跟随)null,并且两个空引用相互比较相等。
Double.CompareTo(object)
文档中也可以看出这一点:
如果此实例大于value,则返回正整数。 - 或者 - 此实例是一个数字,值不是数字(NaN)。 - 或 - value是一个空引用(在Visual Basic中为Nothing)。
正如Adam Houldsworth所指出的,如果something.CompareTo(somethingElse)
在somethingElse为null时抛出异常,那么排序和类似的事情将需要大量额外的异常处理。
答案 2 :(得分:2)
当您对CompareTo
的{{1}}进行反编译时,您可以看到:
double
只是将null元素放在任何排序序列的底部。