C# 区域性敏感的GetHashCode
我正在编写一个c#应用程序,它将处理一些文本并提供基本的查询功能。为了确保对其他语言的最佳支持,我允许应用程序的用户指定System.Globalization.CultureInfo(通过“en GB”样式代码)以及使用System.Globalization.CompareOptions标志枚举的完整排序选项 对于常规字符串比较,我将使用以下组合: a) 字符串。比较接受区域性和选项的重载C# 区域性敏感的GetHashCode,c#,unicode,C#,Unicode,我正在编写一个c#应用程序,它将处理一些文本并提供基本的查询功能。为了确保对其他语言的最佳支持,我允许应用程序的用户指定System.Globalization.CultureInfo(通过“en GB”样式代码)以及使用System.Globalization.CompareOptions标志枚举的完整排序选项 对于常规字符串比较,我将使用以下组合: a) 字符串。比较接受区域性和选项的重载 b) 对于一些大容量进程,我正在缓存CompareInfo.GetSortKey(接受选项的重载)中的
b) 对于一些大容量进程,我正在缓存CompareInfo.GetSortKey(接受选项的重载)中的字节数据(KeyData),并使用KeyData的逐字节比较 这看起来很好(尽管如果您认为这两个方法不应该混合使用,请发表评论),但是我有理由使用HashSet类,它只为IEqualityComparer提供了一个重载 MS文档似乎建议我使用StringComparer(它同时实现IEqualityComparer和IComparer),但这似乎只支持CompareOptions中的“IgnoreCase”选项,而不支持“IgnoreKanaType”、“IgnoreSymbols”、“IgnoreWidth”等 我假设忽略这些其他选项的StringComparer可以为两个字符串生成不同的哈希代码,而使用我的其他比较选项可能会认为这两个字符串是相同的。因此,我的申请结果不正确 目前唯一需要考虑的是创建我自己的IEqualityComparer,它从SortKey.KeyData生成一个哈希代码,并使用String.Compare重载比较eqality
有什么建议吗?您当然需要实现自己的IEqualityComparer,但我不认为哈希代码一定要在其中发挥作用。只需使用字符串。按照您所说的比较重载