为什么 SortedSet 默认忽略 CompareTo() 值 0

本文关键字:CompareTo SortedSet 默认 为什么 | 更新日期: 2023-09-27 18:35:33

当我尝试将范围添加到排序集时,当它们的比较结果为零时,它不会添加值。这对我来说没有任何意义,因为它不是 compareTo 正在比较的值的排序集,而是 T 的排序集。我试图理解为什么Microsoft会这样实现它。

  1. 对此有什么合乎逻辑的解释可以帮助我将来记住吗?
  2. 通过
  3. 不从 CompareTo 返回 0 在我的类型上实现 IComparable 的正确方法是否可比?如果我在代码中的其他地方使用其 IComparable.CompareTo() 方法时需要 CompareTo 显式确定相等性,会发生什么情况?

为什么 SortedSet<T> 默认忽略 CompareTo() 值 0

这将使 SortedSet 成为非确定性的

排序集

表示按排序顺序维护的对象集合。

如果允许领带,就会有一个武断的命令。 这就像字典中的重复键。

如果你想要一组 T,其中一些从比较返回 0,那么 SortSet 不是正确的集合。

我感觉这有点XY问题。 你想解决什么问题?

比较的重点在于说明一个项目是否大于、小于或等于另一个项目。集合不允许相等的值 - 在排序集中,相等由比较定义。就这么简单。

对于您的第二个问题,听起来您希望进行两种不同的比较 - 一种在某些情况下返回 0,而另一种则不会。您可以通过在单独的类中实现IComparer<T>作为单独的比较来做到这一点。请记住,例如,您仍然希望返回 0 表示Compare(x, x),否则除了迭代它之外,您将永远无法在集合中找到任何内容......