我在写一个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。
有什么建议吗?