VB.NET使用CompareTo排序顺序 - 结果不正确?

时间:2012-08-14 21:31:05

标签: vb.net string sorting compare compareto

我有一长串字符串值,我试图在网格中排序。最初,默认排序算法用于整个网格。但是,我最终不得不重写网格的排序,因为有几列需要特殊排序,并且网格不允许对特定列进行自定义排序。这里讨论的列不需要特殊的排序,所以我只使用了CompareTo:

Public Function Compare(ByVal p1 as MyObj, ByVal p2 as MyObj) As Integer
    Return p1.Description.CompareTo(p2.Description)
End Function

比较默认网格排序方法和我现在使用CompareTo的方法,我得到完全相同的结果。但是,直接数据库查询的排序结果不同(数据库结果根据我认为应该是正确的)。

以下是我认为不正确的排序结果的三个例子:

示例1

排序结果:

  1. TEST- A / A MY TEST
  2. TEST1000 A TEST
  3. TEST1000 TEST
  4. TESTR A TEST
  5. TEST-B / A MY TEST
  6. 预期结果:

    1. TEST- A / A MY TEST
    2. TEST-B / A MY TEST
    3. TEST1000 A TEST
    4. TEST1000 TEST
    5. TESTR A TEST
    6. 示例2

      排序结果:

      1. TEST- A TEST
      2. TEST ME
      3. TEST-#1 A
      4. TEST-#1 B
      5. 预期结果:

        1. TEST ME
        2. TEST- A TEST
        3. TEST-#1 A
        4. TEST-#1 B
        5. 示例3

          排序结果:

          1. LOUISE TEST 1
          2. LOUISE TEST 2
          3. LOUIS- TEST 1
          4. 预期结果:

            1. LOUIS- TEST 1
            2. LOUISE TEST 1
            3. LOUISE TEST 2
            4. 之前有没有人碰过这个或者有任何想法可以在这里发生什么?

1 个答案:

答案 0 :(得分:2)

CompareTo执行区分大小写,对文化敏感的排序,因此像撇号,连字符等字符不会显示严格字符编码排序的位置 - 这似乎是您所期待的。 / p>

考虑使用Compare的重载,可以将StringComparison指定为序数