在C#中,您可以将两个字符串与String.Equals
进行比较,然后提供StringComparison
。
我最近一直在寻找更新我比较ToLower()
的古老方法,因为我读到它并不适用于所有语言/文化。
据我所知,比较类型用于确定在面对包含aé
和ae
的列表时的顺序,该列表应首先出现(某些文化以不同的方式排序)。
使用string.Equals
,排序并不重要。因此可以安全地假设许多选项是无关紧要的,只有[Ordinal]和[Ordinal] IgnoreCase很重要?
MSDN article for String.Equals说
comparisonType参数指示比较是否应该 使用当前或不变的文化,尊重或忽视的情况 比较两个字符串,或使用单词或序数排序规则。
string.Equals(myString, theirString, StringComparison.OrdinalIgnoreCase)
我也有兴趣了解排序方法如何在内部工作,是否使用String.Compare
来计算两个字符串的相对位置?
答案 0 :(得分:7)
不区分大小写的比较是依赖于文化的。例如,使用土耳其文化时,i
的{{1}}不是小写字母。该文化I
与I
配对,ı
与İ
配对。请参阅Dotted and dotless I on Wikipedia。
有许多与文化敏感的字符串操作相关的奇怪效果。例如"KonNy".StartsWith("Kon")
can return false
。
所以我建议转换到对文化不敏感的操作,即使是看似无害的操作。
即使对文化不敏感的操作,在unicode中存在大量不直观的行为,例如同一字形的多个表示,看起来相同的不同代码点,被某些操作忽略的零宽度字符,但是被其他人观察到。 ..