当我尝试将AddRange添加到SortedSet时,当它们的compareto结果为零时,它不会添加值。这对我没有任何意义,因为它不是compareTo比较的值的SortedSet,它是T的SortedSet。我试图理解为什么Microsoft会像这样实现它。
答案 0 :(得分:0)
比较的重点是说一个项目是否大于,小于或等于另一个项目。集合不允许相等的值 - 并且在排序集合中,相等性定义了相等性。就这么简单。
对于你的第二个问题,听起来你想要进行两种不同的比较 - 一种在某些情况下返回0,而另一种则不然。您可以通过在单独的类中实现IComparer<T>
作为单独的比较来实现。请记住,你仍然希望为Compare(x, x)
返回0,否则你将永远无法在集合中找到任何东西而不是迭代它...
答案 1 :(得分:0)
它会使SortedSet成为非确定性的
表示按排序顺序维护的对象集合。
如果允许关系,则会有任意顺序。这就像字典中的重复键一样。
如果你想要一组T,其中一些从比较返回0,那么SortSet不是正确的集合。
我觉得这有点像XY problem。你想解决什么?