【发布时间】:2021-11-16 22:36:25
【问题描述】:
Compare(T? x, T? y) 的文档说:
返回:
一个有符号整数,表示 x 和 y 的相对值
小于零 - x 小于 y。
零 - x 等于 y。
大于零 - x 大于 y。
考虑这个例子:
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Console.WriteLine(Comparer<int?>.Default.Compare(null, 1)); // -1 ?huh?
Console.WriteLine(Comparer<int?>.Default.Compare(-1, 1)); // -1
Console.WriteLine(Comparer<int?>.Default.Compare(1, 1)); // 0
Console.WriteLine(Comparer<int?>.Default.Compare(2, 1)); // 1
Console.WriteLine((int?)null < 1); // False
Console.WriteLine((int?)null == 1); // False
}
}
所以null“小于”某个值。如果它返回一个不同的幻数(例如-2),或者抛出异常等等,我就不会那么惊讶了。
正如预期的那样,null < 1 是假的,这似乎与上述相反。
这是有什么原因,还是只是需要注意的 API 怪癖?
【问题讨论】:
-
据我所知,比较器总是返回 -1、0 或 1。我不会认为 null 与这种情况相同或更大,所以 -1 最有意义
-
注意这里和
Nullable.Compare一致。