6

我想知道我是否在 .NET Framework 中发现了一个错误,或者我是否有什么不明白的地方。运行这段代码后:

var text = "مباركُ وبعض أكثر من نص";
var word = "مبارك";
bool exist = text.Contains(word);
int index = text.IndexOf(word);

结果是“exists = true”和“index = -1”

怎么会这样?

4

1 回答 1

9

Contains是文化不敏感的:

此方法执行序数(区分大小写和不区分区域性)比较。

IndexOf是文化敏感的:

此方法使用当前区域性执行单词(区分大小写和区域性)搜索。

这就是区别。如果你使用

int index = text.IndexOf(word, StringComparison.Ordinal);

那么你会得到一个 0 而不是 -1 的索引(所以它与 一致Contains)。

没有文化敏感的Contains; 我不清楚您是否可以IndexOf可靠地使用它,但是该CompareInfo课程提供更多选择。(我真的不太了解文化比较的细节,尤其是RTL文本。我只知道它很复杂!)

于 2013-09-11T06:16:17.913 回答