字符串.Sort和大于/小于运算符VB.Net之间的差异

字符串.Sort和大于/小于运算符VB.Net之间的差异,.net,vb.net,sorting,string-comparison,.net,Vb.net,Sorting,String Comparison,我有一个简单的例程,可以根据未排序的对象集合中的name属性查找下一个对象。我遍历集合并在列表(字符串)中收集所有名称,添加任何属于我当前名称的名称,这将给出当前键后面的所有内容的列表。然后,我使用列表(字符串)上的默认.sort()方法对列表进行排序,并获取列表中的第一项,它应该是我的下一项。我反向查找上一个项目,添加所有项目 我唯一的解释是,运算符的比较不同于.Sort()方法。这是真的吗 否。排序在内部使用的方法会产生与一致的结果 但是,只有在未更改项目或当前文件的设置的情况下,才会出现这

我有一个简单的例程,可以根据未排序的对象集合中的name属性查找下一个对象。我遍历集合并在
列表(字符串)
中收集所有名称,添加任何属于
我当前名称的名称,这将给出当前键后面的所有内容的列表。然后,我使用
列表(字符串)
上的默认
.sort()
方法对列表进行排序,并获取列表中的第一项,它应该是我的下一项。我反向查找上一个项目,添加所有项目

我唯一的解释是,<和>运算符的比较不同于.Sort()方法。这是真的吗

否。
排序
在内部使用的方法会产生与
一致的结果


但是,只有在未更改项目或当前文件的设置的情况下,才会出现这种情况。这将改变
的行为,但不会改变上述方法的行为。

我想您已经找到了问题所在。但要说明的是,您正被某些VB6兼容行为所困扰。Compare选项的默认值是使用String.CompareOrdinal()的二进制。不是List.Sort()使用的。选项比较文本使用CultureInfo.CompareInfo.Compare()和CompareOptions.IgnoreWidth、CompareOptions.IgnoreKanaType、CompareOptions.IgnoreCase选项。也不是List.Sort()使用的


避免使用运算符,而是使用String.Compare()。

与其描述代码,不如发布代码?我没有更改比较选项。根据我的项目设置,Compare选项设置为binary,我假设这是默认值。您已经引导我找到了答案,但显然与String.CompartTo不同,
CompareTo
的文档说
此方法执行单词(区分大小写和区域性)使用当前区域性进行比较
选项Compart Text
表示
根据应用程序的区域设置确定的不区分大小写的文本排序顺序对字符串进行比较。
@Kratz您引用的内容仅对
选项Compare Text
有效。在
选项Compare Binary
下,它们的行为相同(区分大小写,区分区域性)。
选项按照从字符的内部二进制表示形式派生的排序顺序比较二进制基数字符串比较。
,现在我知道我的项目设置为
Binary
,我的代码的行为证明它们是不同的。在我的例子中,
-
\uu
的比较是不同的。我将
替换为String.Compare(因此它以相同的方式进行比较),现在工作正常。
        Dim Key As String = Name
        Dim NameList As New List(Of String)
        For Each obj As T In Collection
            Dim ObjKey As String = Obj.Key
            If  ObjKey > Key Then
                NameList.Add(ObjKey)
            End If
        Next
        If NameList.Count = 0 Then Return Nothing
        NameList.Sort()
        Dim NextKey As String = NameList.First