我有一个很长的字符串值列表,我正在尝试在网格中进行排序。最初,默认排序算法用于整个网格。但是,我最终不得不重写网格的排序,因为一些列需要特殊排序,并且网格不允许对特定列进行自定义排序。这里有问题的列不需要特殊排序,所以我只使用了 CompareTo:
Public Function Compare(ByVal p1 as MyObj, ByVal p2 as MyObj) As Integer
Return p1.Description.CompareTo(p2.Description)
End Function
比较默认的网格排序方法和我现在使用 CompareTo 的方法,得到完全相同的结果。但是,直接数据库查询的排序结果有所不同(其中数据库结果根据我认为应该是正确的)。
以下是我认为不正确的排序结果的三个示例:
示例 1
排序结果:
- 测试 - A/A 我的测试
- TEST1000 测试
- 测试1000测试
- 测试一个测试
- 测试-B/A 我的测试
预期结果:
- 测试 - A/A 我的测试
- 测试-B/A 我的测试
- TEST1000 测试
- 测试1000测试
- 测试一个测试
示例 2
排序结果:
- 测试 - 一个测试
- 测试我
- 测试-#1 A
- 测试-#1 B
预期结果:
- 测试我
- 测试 - 一个测试
- 测试-#1 A
- 测试-#1 B
示例3
排序结果:
- 路易丝测试 1
- 路易丝测试 2
- 路易斯-测试 1
预期结果:
- 路易斯-测试 1
- 路易丝测试 1
- 路易丝测试 2
有人以前遇到过这个问题或者有任何想法可能会发生什么吗?
最佳答案
CompareTo进行区分大小写、区分区域性的排序,因此撇号、连字符等字符不会显示严格的字符编码排序中的位置 - 这似乎是您所期望的。
考虑使用 Compare 的重载允许您指定 StringComparison作为序数
关于使用 CompareTo 的 VB.NET 排序顺序 - 结果不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961053/