我正在尝试调试问题并遇到了这个问题。也许有人可以向我解释。这是有问题的代码
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类
答案 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