首页 新闻 会员 周边

List的sort方法报出来的奇怪问题

0
悬赏园豆:40 [待解决问题]

代码里面有一个DateTime的List,现在算法中要先对该List做排序,所以调用了List的Sort()方法:

DateTimeList.Sort((p1,p2)=>DateTime.Compare(p1,p2))

现在在生产环境每天都会报少量如下的错误:

System.ArgumentException: Unable to sort because the IComparer.Compare() method returns inconsistent results. Either a value does not compare equal to itself, or one value repeatedly compared to another value yields different results. IComparer: 
at System.Collections.Generic.IntrospectiveSortUtilities.ThrowOrIgnoreBadComparer(Object comparer)
at System.Collections.Generic.ArraySortHelper`1.Sort(T[] keys, Int32 index, Int32 length, IComparer`1 comparer)
at System.Collections.Generic.List`1.Sort(Comparison`1 comparison)

 

说是不能比较,因为比较结果有不确定性,但是日期这种东西不能比较有些奇怪,求教大神解答!

且听风吟lst的主页 且听风吟lst | 初学一级 | 园豆:68
提问于:2016-08-24 18:41
< >
分享
所有回答(4)
0

是不是当时比较时其中有一个值为null

dudu | 园豆:31003 (高人七级) | 2016-08-24 21:03

应该不会,dateTime不能为空的啊,默认的话也是0001-01-01

支持(0) 反对(0) 且听风吟lst | 园豆:68 (初学一级) | 2016-08-25 09:49
0

list.Sort((x, y) => y.CompareTo(x)); 试试这个,如果不对,估计你列表的数据有问题

2012 | 园豆:21230 (高人七级) | 2016-08-25 08:37
0

排序直接sort()不就好了,你传这个比较器是想干嘛

balahoho | 园豆:2050 (老鸟四级) | 2016-08-25 14:29

我把问题简化了抛出来了,实际list里面是一个class,是用class里面的一个dateTime成员做比较的。

支持(0) 反对(0) 且听风吟lst | 园豆:68 (初学一级) | 2016-08-25 17:38
0

看到这个问题这么久都没有人回答 ,那么我来回答下吧。刚刚解决这个问题
首先 如果你自己写个排序 冒泡排序也好 啥也好 那么如果报错了 你肯定找得到原因 因为代码提示就在那里。

表面提示像是sort 底层匹配两个元素 出现问题 (比如其中一个元素为null )
但是如果你用这个sort 委托的方式 如果不深入理解的话就会掉坑。总之是你sort里面的委托 代码有问题 ,没有正确区分出 哪个大 哪个小 哪种相等 , 运行到最后 导致逻辑出现混乱 (最后导致sort委托里 比较的两个元素 有为空的 ,正常情况下 应该 始终 不可能出现 任意比较的对象为空的情况 ,特别是排序元素个数为奇数的时候)

assassinx | 园豆:202 (菜鸟二级) | 2018-12-25 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册