C# 这个自定义比较函数有什么问题

C# 这个自定义比较函数有什么问题,c#,icomparer,C#,Icomparer,我试图调试一个问题,但遇到了这个问题。也许有人能给我解释一下。这就是问题中的代码 public int Compare(CustomClass rt1, CustomClass rt2) { if (rt1 == null & rt2 == null) return 0; if (rt1 == null) return -1; if (rt2 == null) retur

我试图调试一个问题,但遇到了这个问题。也许有人能给我解释一下。这就是问题中的代码

public int Compare(CustomClass rt1, CustomClass rt2)
{
     if (rt1 == null & rt2 == null)
                return 0;
     if (rt1 == null)
                return -1;
     if (rt2 == null)
                return 1;
     if (rt1.yPos < rt2.yPos)
                return -1;
     if (rt1.yPos == rt2.yPos)
     {
                if (rt1.xPos < rt2.xPos)
                    return -1;
                if (rt1.xPos == rt2.xPos)
                    return 0;
     }
     return 1;
}
public int比较(CustomClass rt1、CustomClass rt2)
{
if(rt1==null&rt2==null)
返回0;
如果(rt1==null)
返回-1;
如果(rt2==null)
返回1;
if(rt1.yPos
我得到的错误是:当Array.Sort调用x时,IComparer(或它所依赖的IComparable方法)没有返回零。比较(x)

更有趣的是,如果我在调试模式下从VS运行它,则不会发生错误。只有当我把它放在发布模式,点击“启动而不调试”。有人知道为什么会这样吗?我通过在函数开头添加一行“if(rt1==rt2)return 0;”修复了这个问题,但我真的很想知道发生了什么

额外信息:
是的,这实现了IComparer类

您缺少的一个符号(&)(这是一个输入错误吗?)


有时,排序算法最终会将对象与自身进行比较。发生这种情况时,它触发了以下代码:

if (rt1 == null)
    return -1;
正是这一点导致了错误。你一定要确保你把所有的案子都办妥了


如果这些x,y值代表点,您可能想查看这篇关于对它们进行排序的文章:

您能给我们一些上下文吗?涉及到线程吗?序列化?还有什么有趣的事情吗?放在一边:
if(rt1==null&&rt2==null)
(double
&
)并且您的类实现了
IComparer
,并且正在传递给数组方法?您的右边。我已经删除了我的答案。我还认为,如果(rt1==null&rt2==null)
没有引起问题,那么这个
就是由这里的标记引起的。它是一个双精度的&在代码中如果它与自身进行比较,为什么
rt1
null
,并且它还没有触发
返回0
的情况?我假设第一个if语句是他为消除错误消息而添加的位。OP说那是“
if(rt1==rt2)返回0;
”。
if (rt1 == null)
    return -1;