SortVersion

本文提供了对此 API 的参考文档的补充说明。

.NET Framework 中的排序和字符串比较

截至 .NET Framework 4,每个版本的 .NET Framework 都有包含排序权重和字符串规范化数据且基于特定版本的 Unicode 的表。 在 .NET Framework 4.5 及更高版本中,这些表的存在与否取决于操作系统:

  • 在 Windows 7 和以前的版本中,这些表将继续用于字符串的比较和排序。
  • 在 Windows 8 中,.NET Framework 会将字符串比较和排序操作委托给操作系统。

因此,字符串比较的结果不仅取决于 .NET Framework 版本,还取决于操作系统版本,如下表所示。 请注意,受支持的 Unicode 版本的列表仅适用于字符比较和排序;不适用于 Unicode 字符串按类别分类。

.NET Framework 版本 操作系统 Unicode 版本
4 所有操作系统 Unicode 5.0
4.5 及更高版本 Windows 7 Unicode 5.0
4.5 及更高版本 Windows 8 及更高版本 Unicode 6.0

在 Windows 8 上,由于用于字符串比较和排序的 Unicode 版本取决于操作系统的版本,因此即使是在特定版本的 .NET Framework 上运行的应用程序,其字符串比较结果也可能有所不同。

.NET Core 中的排序和字符串比较

所有版本的 .NET (Core) 都将在执行字符串比较时依赖于基础操作系统。 因此,字符串比较的结果或字符串排序顺序取决于操作系统在执行比较时使用的 Unicode 的版本。 在 Linux、macOS 和 Windows 10 及更高版本上,Unicode 国际化组件库将提供用于比较和排序 API 的实现。

使用 SortVersion 类

SortVersion 类提供有关 .NET 用于字符串比较和排序的 Unicode 版本的信息。 它使开发人员能够编写满足以下要求的应用程序:可以检测和成功处理用于对应用程序的字符串进行比较和排序的 Unicode 版本的更改。

你可以通过两种方式将 SortVersion 对象实例化:

  • 通过调用 SortVersion 构造函数,这将基于版本号和排序 ID 将新的 SortVersion 对象实例化。 此构造函数在基于保存的数据重新创建 SortVersion 对象时最有用。
  • 通过检索 CompareInfo.Version 属性的值。 此属性提供有关运行应用程序的 .NET 实现所使用的 Unicode 版本的信息。

SortVersion 类有两个属性,即 FullVersionSortId,指示用于字符串比较的 Unicode 版本和特定区域性。 FullVersion 属性是一个任意数值,反映用于字符串比较的 Unicode 版本;SortId 属性是一个任意 Guid,反映其约定用于字符串比较的区域性。 只有当使用 Equals 方法、Equality 运算符或 Inequality 运算符比较两个 SortVersion 对象时,这两个属性的值才很重要。

在保存或检索某种形式的区域性敏感型有序字符串数据(例如索引或文本字符串本身)时,通常使用 SortVersion 对象。 这需要执行以下步骤:

  1. 保存有序字符串数据时,还会保存 FullVersionSortId 属性值。

  2. 检索有序字符串数据时,可以通过调用 SortVersion 构造函数重新创建用于对字符串进行排序的 SortVersion 对象。

  3. 这一新实例化的 SortVersion 对象将与反映以下内容的 SortVersion 对象进行比较:用于对字符串数据进行排序的约定所属的区域性。

  4. 如果两个 SortVersion 对象不相等,则必须对字符串数据重新排序。