对字符串进行排序取决于比较所使用的排序规则以及顺序和字符串对。 在应用程序执行比较操作时,它既可以使用一个或多个 CompareOptions 枚举值来显式指定排序规则,也可以使用一个 CultureInfo 对象来隐式指定排序规则。
.NET Framework 支持单词、字符串和序号排序规则。 单词排序会执行区分区域性的字符串比较,在这种比较中,某些非字母数字 Unicode 字符可能会具有特殊的权重。 例如,连字符(“-”)的权重非常小,因此“coop”和“co-op”在排序列表中是紧挨着出现的。 字符串排序与单词排序相似,唯一区别是字符串排序中不存在特殊情况,所有非字母数字符号均排在所有字母数字 Unicode 字符之前。 序号排序基于字符串中每个 Char 对象的数值对字符串进行比较。 有关单词、字符串和序号排序规则的更多信息,请参见 CompareOptions。
.NET Framework 使用 String 类来表示字符串,字符串中的每一个 Unicode 字符都具有 Char 结构。 区域性使用 CultureInfo 类来表示,与比较有关的区域特定信息由 CompareInfo 类来表示。 String 和 CompareInfo 类是比较方法的主要源。 除非另行指定,否则比较操作将使用与当前线程关联的区域性。
何时以及如何使用区域性进行比较
使用下列准则可以确定应用程序是否应执行区分区域性的比较:
如果应用程序需要执行的排序操作依赖于特定的区域性,则它应该使用指定 CultureInfo 对象或 CompareOptions 枚举参数的比较方法。
如果应用程序需要执行的排序操作并不特定于特定的区域性,则它应该指定固定区域性或使用序号排序。 例如,应用程序使用序号比较来对文件、mutex 和命名管道的名称进行排序。 有关固定区域性的更多信息,请参见 使用 InvariantCulture 属性。 有关序号排序的更多信息,请参见 正常化和排序。
如果应用程序要基于排序字符串做出安全决策,请使用序号排序。
![]() |
---|
对于用于做出安全决策的比较操作,以前使用固定区域性的建议已被取代。应用程序应改用序号比较。 |