ValueTuple.IComparable.CompareTo(Object)的文档说它返回:
如果 other 是 ValueTuple 实例,则为 0;否则,如果 other 为空,则为 1。
这使得IComparable
实现看起来毫无用处,除了可能不会破坏可能期望实现接口的代码。较旧的参考Tuple
类确实遵循标准实现(尽管它可能仅在项目支持时才有效IComparable
)。
文档说IComparable
表明可以对类型进行排序,但情况并非如此ValueTuple
:
此接口由其值可以排序或排序的类型实现。它要求实现类型定义一个方法,CompareTo,该方法指示当前实例在排序顺序中的位置是在相同类型的第二个对象之前、之后还是相同。(...)
CompareTo 方法的实现必须返回具有三个值之一的 Int32,如下表所示。
小于零当前实例在排序顺序中位于 CompareTo 方法指定的对象之前。
零此当前实例出现在排序顺序中与 CompareTo 方法指定的对象相同的位置。
大于零此当前实例在排序顺序中遵循由 CompareTo 方法指定的对象。
所以我的问题是:
- 为什么不像 Tuple 那样
ValueTuple
实现呢?CompareTo
- 为什么
IComparable
即使它不支持有意义的排序,它也会实现?