文化敏感的GetHashCode

时间:2010-06-07 09:37:27

标签: c# unicode

我正在编写一个c#应用程序,它将处理一些文本并提供基本的查询功能。为了确保对其他语言的最佳支持,我允许应用程序的用户指定System.Globalization.CultureInfo(通过“en-GB”样式代码)以及使用系统的全套校对选项.Globalization.CompareOptions标志枚举。

对于常规字符串比较,我然后使用以下组合:

a)String.Compare重载,接受文化和选项
b)对于一些批量进程,我从CompareInfo.GetSortKey(接受选项的重载)缓存字节数据(KeyData),并使用KeyData的逐字节比较。

这看起来很好(虽然请注意,如果你认为这两种方法不应混合),但我有理由使用HashSet<>只有IEqualityComparer<>。

的重载的类 MS文档似乎建议我应该使用StringComparer(它实现IEqualityComparer<>和IComparer<>),但这似乎只支持CompareOptions的“IgnoreCase”选项而不是“IgnoreKanaType”,“IgnoreSymbols” ,“IgnoreWidth”等。

我假设忽略这些其他选项的StringComparer可以为两个字符串生成不同的哈希码,使用我的其他比较选项可能会认为这两个字符串相同。因此,我的申请结果不正确。

目前只想到创建自己的IEqualityComparer<>从SortKey.KeyData生成哈希码并使用String.Compare重载比较eqality。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您肯定需要实现自己的IEqualityComparer<>,但我不相信哈希码必然会发挥作用。只需像你说的那样使用string.Compare重载。