C#在Compare时出错:IComparer (或其依赖的 IComparable 方法)未返回零
今天在C#实现一个IComparer接口时遇到了问题,在执行过程中抛出了如下异常:
当 Array.Sort 调用 x.CompareTo(x) 时,IComparer (或其依赖的 IComparable 方法)未返回零
当时楞了一下,不知道是怎么回事,后来发现应该先确定要比较的两个参数是否是同一个引用,如果是则要返回0。
整个比较的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
class
MetaItemXSort : IComparer
{
public
int
Compare(Object x, Object y)
{
//请注意这里比较两个参数是否是同一引用,如果是则要返回0
if
(x.Equals(y))
return
0;
BaseItem temp1 = x as
BaseItem;
BaseItem temp2 = y as
BaseItem;
//null的情况也要考虑
if
(temp1 != null
&& temp2 != null )
return
((PointF)temp1.Bound.Location).X.CompareTo(((PointF)temp2.CenterPoint).X);
else
return
0;
}
}
|
1、先判断对象为空的情况
2、都非空,再判断两个参数是否为同一对象引用,若是返回0
3、最后按对象的属性来对比排序