我想知道我是否在.NET Framework中发现了一个错误,或者我是否理解了某些内容。 运行这段代码后:
var text = "مباركُ وبعض أكثر من نص";
var word = "مبارك";
bool exist = text.Contains(word);
int index = text.IndexOf(word);
结果是" exists = true"和" index = -1"
怎么可能?
答案 0 :(得分:9)
Contains
对文化不敏感:
此方法执行序数(区分大小写和区分大小写)比较。
IndexOf
对文化很敏感:
此方法使用当前文化执行单词(区分大小写和文化敏感)搜索。
这就是区别。如果你使用
int index = text.IndexOf(word, StringComparison.Ordinal);
然后你会得到一个0而不是-1的索引(因此它与Contains
一致)。
Contains
没有文化敏感的超载;我不清楚你是否可以可靠地使用IndexOf
,但是CompareInfo
类给了一些更多选项。 (我真的不太了解文化比较的细节,尤其是RTL文本。我只知道它很复杂!)