这个自定义比较功能有什么问题

时间:2009-10-20 19:15:20

标签: c# icomparer

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

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方法)没有返回零。的CompareTo(X)。

为了使它更有趣,如果我在调试模式下从VS运行它,则不会发生错误。只有当我把它置于释放模式并且点击“开始没有调试”。任何人都有任何想法为什么会发生这种情况?我通过添加“if(rt1 == rt2)返回0;”修复了问题。直到函数的开头,但是真的想知道发生了什么。

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

2 个答案:

答案 0 :(得分:2)

你错过了一个安瓿(&amp;)(这是一个错字吗?)

if (rt1 == null & rt2 == null) // oops!
if (rt1 == null && rt2 == null) // like this....

答案 1 :(得分:0)

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

if (rt1 == null)
    return -1;

正是这导致了错误。你必须确保你已经涵盖了所有案件。

如果这些x,y值代表点,您可能需要查看有关排序的文章:http://www.c-sharpcorner.com/UploadFile/mgold/SortedDictionarySample06202007142815PM/SortedDictionarySample.aspx