8

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

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

据我所知,比较类型用于确定在遇到包含列表时的顺序以及ae应该首先出现的列表(某些文化对事物的排序方式不同)。

对于string.Equals,排序并不重要。因此可以安全地假设许多选项是不相关的,并且只有 [Ordinal] 和 [Ordinal]IgnoreCase 是重要的吗?

String.Equals的MSDN 文章说

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

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

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

4

1 回答 1

8

不区分大小写的比较取决于文化。例如使用土耳其文化,i不是小写的I. 与那个文化I是配对的ı,并且İ是配对的i。请参阅Wikipedia 上的 Dotted and dotless I

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

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


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

于 2012-08-21T15:10:57.863 回答