![]() |
1
22
当比较函数不一致时会出现这个问题,这样x<y并不总是意味着y<x。在您的示例中,您应该检查someprop类型的两个实例是如何进行比较的。 这里有一个复制问题的例子。这里,它是由病理比较功能“比较”引起的。这取决于列表的初始状态:如果您将初始顺序更改为“C”、“B”、“A”,则没有例外。 我不会在排序函数中将其称为bug——这只是一个要求比较函数是一致的。
|
![]() |
2
3
你确定问题不是那个吗
特别是,使用字符串或
对于字符串,最好使用:
(编辑)
对于空安全包装,可以使用
|
![]() |
3
3
我也遇到了这个问题(将空引用传递给我的自定义IComparer实现),最后发现问题是由于使用了不一致的比较函数造成的。 这是我最初的iComparer实现:
这段代码中的错误是,每当有一个值无法正确解析时(在我的例子中,这是由于数字值的字符串表示格式错误导致的),Compare都会返回-1,因此Trparse总是失败的。 注意,如果x和y的格式都不正确(因此两个函数都失败),调用compare(x,y)和compare(y,x)将产生相同的结果:-1。我认为这是主要问题。在调试时,即使要排序的集合不包含空字符串,也会在某个点将compare()作为其参数之一传递给空字符串指针。 一旦我修复了台盼问题并确保了实现的一致性,问题就消失了,比较不再被传递空指针。 |
![]() |
4
0
马克的回答很有用。我同意他的观点,nullReference是由于调用了一个空属性上的compareto。不需要扩展类,您可以执行以下操作:
其中someprop type是someprop的类型 |
![]() |
5
0
出于调试目的,您希望方法是空安全的。(或者至少捕获空引用异常,并以某种硬编码方式处理它)。然后,使用调试器来观察比较其他值的顺序以及调用的成功或失败。 然后,您将找到您的答案,然后您可以删除空安全。 |
![]() |
6
0
你能运行这个代码吗?
|
![]() |
7
0
我自己偶然发现了这个问题,发现它与
|
![]() |
Dave · 如何在for循环中修改列表值 5 月前 |
![]() |
matteo panaro · 向列表中添加项目 6 月前 |
![]() |
Bioinfotec · 如何在R中将两个嵌套列表合并为一个列表? 6 月前 |
![]() |
Pernoctador · Python映射可以复制吗?我需要参考地图 6 月前 |
![]() |
Bogaso · 从列表中返回与模式匹配的元素 6 月前 |
![]() |
Tom Hunter · Excel验证列表中的条目 7 月前 |
![]() |
Estrobelai · Python:数组中价格高于平均值的所有项目 10 月前 |