比较NaN和null会返回不合逻辑的值

rud*_*ter 7 c#

为什么以下代码段返回1:

double i = double.NaN;
double? i2 = null;
i.CompareTo(i2);
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,没有任何意义.例外情况更合适.

你认为这个决定背后的原因是什么?

JLR*_*she 2

来自 MSDN 文档IComparable.CompareTo()

根据定义,任何对象都比较大于(或小于)null,并且两个 null 引用比较彼此相等。

从文档中也可以看出这一点Double.CompareTo(object)

如果此实例大于值,则返回正整数。- 或 - 该实例是一个数字,而值不是数字 (NaN)。- 或 - 值是空引用(在 Visual Basic 中为 Nothing)。

正如 Adam Houldsworth 指出的那样,如果something.CompareTo(somethingElse)当 someElse 为 null 时抛出异常,那么排序和类似的事情将需要大量额外的异常处理。