Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区域性敏感的GetHashCode_C#_Unicode - Fatal编程技术网

C# 区域性敏感的GetHashCode

C# 区域性敏感的GetHashCode,c#,unicode,C#,Unicode,我正在编写一个c#应用程序,它将处理一些文本并提供基本的查询功能。为了确保对其他语言的最佳支持,我允许应用程序的用户指定System.Globalization.CultureInfo(通过“en GB”样式代码)以及使用System.Globalization.CompareOptions标志枚举的完整排序选项 对于常规字符串比较,我将使用以下组合: a) 字符串。比较接受区域性和选项的重载 b) 对于一些大容量进程,我正在缓存CompareInfo.GetSortKey(接受选项的重载)中的

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

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

a) 字符串。比较接受区域性和选项的重载
b) 对于一些大容量进程,我正在缓存CompareInfo.GetSortKey(接受选项的重载)中的字节数据(KeyData),并使用KeyData的逐字节比较

这看起来很好(尽管如果您认为这两个方法不应该混合使用,请发表评论),但是我有理由使用HashSet类,它只为IEqualityComparer提供了一个重载

MS文档似乎建议我使用StringComparer(它同时实现IEqualityComparer和IComparer),但这似乎只支持CompareOptions中的“IgnoreCase”选项,而不支持“IgnoreKanaType”、“IgnoreSymbols”、“IgnoreWidth”等

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

目前唯一需要考虑的是创建我自己的IEqualityComparer,它从SortKey.KeyData生成一个哈希代码,并使用String.Compare重载比较eqality


有什么建议吗?

您当然需要实现自己的IEqualityComparer,但我不认为哈希代码一定要在其中发挥作用。只需使用字符串。按照您所说的比较重载