Compare方法出错

{"当 Array.Sort 调用 x.CompareTo(x) 时,IComparer (或其依赖的 IComparable 方法)未返回零。x:“SGGM.Attribute.cRow”x 的类型:“cRow”IComparer:“System.Array+FunctorComparer`1[SGGM.Attribute.cRow]”。"}

因为发现该排序不稳定,当比较的值相等时 ,会出现重新排序的现象。所以做了如下调整,结果出现以上错误

private int comparison(Tvalue ValueA,Tvalue ValueB)
{
if( ValueA>ValueB)// compare 方法比较的是同一个引用时返回0
{
return 1;
}

else

{

return -1;

}

}

在MSDN中查到

在list排序方法中 public void Sort (Comparison<T> comparison) 可能会引发以下两个异常

ArgumentNullException

comparison 为空引用;即list中有null的情况,Comparison<T> 是需要判断出来,并给出返回值。

list[3]=null. 当其他项与该项比较时,没有判断就会引发该异常。所以在comparison实例中需要判断 ValueA ,ValueB 中存在null的情况。

ArgumentException

在排序过程中, comparison 的实现会导致错误。例如,当将一项与其自身比较时,comparison 可能不返回 0,此时引发该异常。

因为sort方法法使用 System.Array.Sort,后者使用 QuickSort 算法。此实现执行不稳定排序;亦即,如果两元素相等,则其顺序可能不被保留。相反,稳定排序保留相等元素的顺序。所以实例应判断出 ValueA = ValueB 的情况,并返回-1,即保留原有的顺序。但是该排序方法还要和 自己比较即 调用方法 x.CompareTo(x) ,所以comparison委托实例需要判断出这种情况 返回0

private int comparison(Tvalue ValueA,Tvalue ValueB)
{
if (ValueA.Equals(ValueB)) // compare 方法比较的是同一个引用时返回0
{
return 0;
}

if (ValueA== null)//可以做到始终将null值做为小值排序。
{
nResult = -1;
}
else
{
nResult = 1;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值