Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在CompareTo()覆盖中有效地禁用Sort()?_C#_Vb.net_Sorting_Collections_Icomparer - Fatal编程技术网

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

C# 在CompareTo()覆盖中有效地禁用Sort()?,c#,vb.net,sorting,collections,icomparer,C#,Vb.net,Sorting,Collections,Icomparer,我的类的CompareTo()方法是动态的,可以是简单的比较,也可以是对许多列的比较。这一切都是在运行时确定的,而且效果很好 但在某些情况下,我希望任何使用默认比较对对象集合进行排序的尝试都不做任何事情 让CompareTo()对任何比较只返回一个0,让我惊讶的是,这是行不通的。列表以某种奇怪的、看似随机的顺序重新排列 在CompareTo()方法实现中是否有这样做的方法?我不希望通过重写Sort()在集合级别处理这个问题。我还没有证明这一点,但是作为建议,如果您尝试返回总是1,或者总是-1,该

我的类的
CompareTo()
方法是动态的,可以是简单的比较,也可以是对许多列的比较。这一切都是在运行时确定的,而且效果很好

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

CompareTo()
对任何比较只返回一个0,让我惊讶的是,这是行不通的。列表以某种奇怪的、看似随机的顺序重新排列


CompareTo()
方法实现中是否有这样做的方法?我不希望通过重写Sort()在集合级别处理这个问题。

我还没有证明这一点,但是作为建议,如果您尝试返回总是1,或者总是-1,该怎么办?

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

这是因为快速排序不是一种有效的方法。除非您能够以某种方式获取元素的索引,否则我看不到在CompareTo方法中解决此问题的好方法。

这违反了CompareTo方法的属性:如果a.CompareTo(B)返回的值不是零,那么B.CompareTo(a)需要返回一个相反符号的值。谢谢,这非常有意义。我原以为是这样的,但数据算法类是很久以前的事了。。。