StringCompace的StringComparison类型的文化是否重要?

Nib*_*Pig 7 c#

在C#中,您可以比较两个字符串String.Equals并提供a StringComparison.

我最近一直在寻找更新我古老的比较方法,ToLower()因为我读到它不适用于所有语言/文化.

从我所知道的,比较的类型来确定订单时,用包含列表面对ae以应首先出现(一些文化不同的东西订购).

有了string.Equals,订购并不重要.因此可以安全地假设许多选项是无关紧要的,只有[Ordinal]和[Ordinal] IgnoreCase很重要?

String.EqualsMSDN文章

comparisonType参数指示比较是应使用当前文化还是不变文化,是否尊重或忽略要比较的两个字符串的大小写,或使用单词或序数排序规则.

string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)

我也有兴趣知道sort方法如何在内部工作,它是否用于String.Compare计算两个字符串的相对位置?

Cod*_*aos 7

不区分大小写的比较是依赖于文化的.例如,使用土耳其文化,i不是小写的I.随着这种文化I与之配对?,并?与之配对i.请参阅Wikipedia上的Dotted和dotless.

有许多与文化敏感的字符串操作相关的奇怪效果.例如"KonNy".StartsWith("Kon")可以返回false.

因此,我建议切换到对文化不敏感的操作,即使对于看似无害的操作也是如此.


即使对文化不敏感的操作,在unicode中存在大量不直观的行为,例如同一字形的多个表示,看起来相同的不同代码点,被某些操作忽略的零宽度字符,但是被其他人观察到,......