【发布时间】:2018-07-23 17:51:14
【问题描述】:
ValueTuple.IComparable.CompareTo(Object) 的文档说它返回:
0 如果 other 是 ValueTuple 实例;否则,如果 other 为 null,则为 1。
这使得IComparable 实现看起来毫无用处,除了可能不会破坏可能期望实现接口的代码。较旧的参考 Tuple 类确实遵循标准实现(尽管它可能仅在项目支持 IComparable 时才有效)。
文档说IComparable表示可以排序,ValueTuple不是这样:
此接口由值可以排序或 排序。它要求实现类型定义一个方法, CompareTo,表示 当前实例在排序顺序中的位置是否为 之前、之后或相同类型的第二个对象。 (...)
CompareTo 方法的实现必须 返回具有三个值之一的 Int32,如图所示 在下表中。
小于零当前实例 在指定的对象之前 排序顺序中的 CompareTo 方法。
零 这个当前实例出现在排序中的相同位置 订单作为指定的对象 CompareTo 方法。
大于 零 此当前实例遵循由 排序顺序中的 CompareTo 方法。
所以我的问题是:
- 为什么
ValueTuple不像Tuple 那样实现CompareTo? - 为什么它实现
IComparable,即使它不支持有意义的排序?
【问题讨论】:
-
这可能与您正在查看空的 ValueTuple 类型而不是其通用变体之一有关吗?
-
@BoltClock 是的,这可以解释。哎呀,没注意到!
标签: c# icomparable valuetuple