Compare方法出错
来源:互联网 发布:gta5优化最好的盗版 编辑:程序博客网 时间:2024/05/21 22:57
原文: 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;
}
}
- Compare方法出错
- Compare方法出错
- compare方法
- compare()方法+使用compare方法
- C#在Compare时出错:IComparer (或其依赖的 IComparable 方法)未返回零
- C# string.Compare()方法
- NSNumber中的compare方法
- compare()与compareTo()方法
- NSString方法compare详解
- NSString方法compare详解
- NSString方法compare详解
- NSString方法compare详解
- NSString compare方法详解
- NSString方法compare详解
- compareTo方法和compare方法
- java 学习关于compare方法
- std::string的compare方法
- beyond compare 命令行调用方法
- oracle删除已连接用户
- 防SQL注入式攻击
- cvbcvbcvbc
- 2010 MVP Openday 见闻
- 我爸是李刚.java 1.1版本正式发布 - 2010年11月4日
- Compare方法出错
- 异常:javax.el.PropertyNotFoundException: Property 'id' not found on ..........
- java TCP/IP应用开发详解&&&中文处理问题
- 区分Activity的四种加载模式
- C# 最小化到系统托盘
- Windows Phone 7 开发 31 日谈——第6日:工具栏
- java类加载 + android伪3d效果
- java的反射机制浅谈
- 有感于腾讯和360的互殴