3

我试图调试一个问题并遇到了这个问题。也许有人可以向我解释。这是有问题的代码

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;
}

我得到的错误是:当 Array.Sort 调用 x 时,IComparer(或它所依赖的 IComparable 方法)没有返回零。比较(x)。

更有趣的是,如果我在调试模式下从 VS 运行它,则不会发生错误。仅当我将其置于发布模式并点击“不调试就开始”时。有人知道为什么会发生这种情况吗?我通过添加“if(rt1 == rt2) return 0;”解决了这个问题 行到函数的开头,但真的很想知道发生了什么。

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

4

2 回答 2

2

您缺少一个符号 (&)(这是一个错字吗?)

if (rt1 == null & rt2 == null) // oops!
if (rt1 == null && rt2 == null) // like this....
于 2009-10-20T19:27:35.087 回答
0

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

if (rt1 == null)
    return -1;

正是这个导致了错误。您必须确保已涵盖所有案例。

如果这些 x,y 值代表点,您可能需要查看这篇文章来对它们进行排序:http ://www.c-sharpcorner.com/UploadFile/mgold/SortedDictionarySample06202007142815PM/SortedDictionarySample.aspx

于 2009-10-20T19:28:36.183 回答