在CompareTo()覆盖中有效禁用Sort()?

时间:2010-03-09 23:24:12

标签: c# vb.net sorting collections icomparer

我班级的CompareTo()方法是动态的,范围从简单的比较到多个列的比较。这一切都是在运行时确定的,效果很好。

但在某些情况下,我希望任何尝试使用默认比较对我的对象集合进行排序,而不做任何事情。

CompareTo()只返回0进行任何比较,令我惊讶的是,它不起作用。该列表以一些奇怪的,看似随机的顺序重新排列。

有没有办法在CompareTo()方法实现中执行此操作?我不想通过重写Sort()来处理这个问题。

3 个答案:

答案 0 :(得分:1)

那是因为QuickSort不是stable sort。我没有看到在CompareTo方法中修复此问题的好选项,除非您能以某种方式获取元素的索引。

答案 1 :(得分:0)

我没有证明这一点,但作为一个建议,如果你试图总是返回1,或者总是-1?

答案 2 :(得分:0)

您必须覆盖Sort()Sort()的默认实现不保证它将如何使用CompareTo()来获取已排序的集合,因此没有任何方法可以使用它来使Sort()做正确的事情