Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
.net 在这种情况下使用StringComparer.CurrentCulture是否正确?_.net_Linq_Utf 8_Sql Order By_String Comparison - Fatal编程技术网

.net 在这种情况下使用StringComparer.CurrentCulture是否正确?

.net 在这种情况下使用StringComparer.CurrentCulture是否正确?,.net,linq,utf-8,sql-order-by,string-comparison,.net,Linq,Utf 8,Sql Order By,String Comparison,我有一个要使用的UTF-8字符串列表。字符串可以包含任意数量的字符集,例如英语、德语和日语,甚至可以是它们的混合 例如,下面是一个示例输入列表: ["東京","North 東京", "München", "New York", "Chicago", "大阪市"] 我不清楚using是否是传递给OrderBy()的正确字符串比较参数。如果应用程序的当前区域性是en-US,但我仍然希望对UTF-8数据进行“正确”排序,而不仅仅是en-US排序规则,该怎么办 我的困惑可能源于我对Oracle中与.N

我有一个要使用的UTF-8字符串列表。字符串可以包含任意数量的字符集,例如英语、德语和日语,甚至可以是它们的混合

例如,下面是一个示例输入列表:

["東京","North 東京", "München", "New York", "Chicago", "大阪市"]
我不清楚using是否是传递给
OrderBy()
的正确字符串比较参数。如果应用程序的当前区域性是
en-US
,但我仍然希望对UTF-8数据进行“正确”排序,而不仅仅是
en-US
排序规则,该怎么办


我的困惑可能源于我对Oracle中与.NET字符串比较和排序语义不匹配的函数的理解。例如,设置NLS_SORT=Japanese_M意味着它将正确地对拉丁语、西欧语和日语进行排序,而不管这些字符是否出现在可排序列中的给定字符串中。

没有一种比较方法适用于所有区域性

除了检测语言并做出相应的选择外,不变量文化是你最好的选择。如您链接的文档所示:

不要:在大多数情况下使用基于StringComparison.InvariantCulture的字符串操作;为数不多的例外之一是保留有语言学意义但文化上不可知的数据


我增加了重点。这个例外或多或少就是你在做的事情。

把你的注意力放在球上:你排序是为了帮助人类在列表中找到一个字符串。你需要一位熟练的语言学家同时了解英语、德语和日语的分类规则。一个人盯上你的名单的几率有多大?始终确保列表是根据本地区域性规则排序的,并且排序是本地化的。

您是说不变量文化是我的最佳选择,但用MSDN的引用否定它,在这种情况下,您同意nobugz,并建议我使用CurrentCulture。是吗?不是。正如我所说,您所做的似乎属于例外,因此我认为MSDN报价支持在这种特定情况下使用不变量文化。如果当地文化占主导地位,nobugz是正确的,但是如果列表如您所说是真正混合的,并且对(大概是多语言的)用户有意义,那么不变量文化是最佳选择。