2010-06-07 77 views
1

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

对于常规的字符串比较我然后使用以下的组合:一个接受培养和选项
b)对于我缓存的字节数据的一些本体方法

一个)String.Compare过载(KEYDATA )来自CompareInfo.GetSortKey(接受选项的重载)并使用KeyData的逐字节比较。

这看起来很好(虽然请评论如果你认为这两种方法不应该混合),但是我有理由使用HashSet类,它只对IEqualityComparer> <>有过载。

MS文档似乎表明我应该使用StringComparer(实现两者的IEqualityComparer <>和IComparer的<>),但这似乎只支持从CompareOptions了“忽略大小写”选项,而不是“IgnoreKanaType”,“IgnoreSymbols” “IgnoreWidth”等

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

现在唯一想到的是创建自己的IEqualityComparer,它从SortKey.KeyData生成一个哈希码,并比较使用String.Compare超载的eqality。

有什么建议吗?

回答

0

您肯定需要实现自己的IEqualityComparer <>,但我不认为哈希码必须发挥作用。就像你说的那样使用string.Compare超载。