本文提供了此 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 类具有两个属性:FullVersion 和 SortId,分别指示用于字符串比较的 Unicode 版本和特定区域性。 该 FullVersion 属性是一个任意数值,反映用于字符串比较的 Unicode 版本,该 SortId 属性是一个任意 Guid 值,反映用于字符串比较的文化习俗。 仅当使用SortVersion方法、Equals运算符或Equality运算符比较两个对象时,这两Inequality个属性的值才很重要。
在保存或检索某种形式的区域性敏感有序字符串数据(例如索引或文本字符串本身)时,通常使用 SortVersion 对象。 这需要以下步骤:
保存有序字符串数据时,FullVersion 和 SortId 的属性值也会被保存。
检索有序字符串数据时,可以通过调用SortVersion构造函数重新创建SortVersion用于对字符串进行排序的对象。
此新的 SortVersion 实例化对象与一个 SortVersion 对象进行比较,该对象反映出用于对字符串数据进行排序的文化约定。
如果两 SortVersion 个对象不相等,则必须对字符串数据重新排序。