Compare方法出错

原文: http://blog.csdn.net/youngmumu/archive/2010/05/05/5559258.aspx

ps:写方法时,加一个相等 return 0;

 

{"当 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、付费专栏及课程。

余额充值