为什么String.IndexOf和String.Contains在提供阿拉伯文本时不一致?

时间:2013-09-11 06:13:47

标签: .net arabic

我想知道我是否在.NET Framework中发现了一个错误,或者我是否理解了某些内容。 运行这段代码后:

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

结果是" exists = true"和" index = -1"

怎么可能?

1 个答案:

答案 0 :(得分:9)

Contains对文化不敏感:

  

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

IndexOf对文化很敏感:

  

此方法使用当前文化执行单词(区分大小写和文化敏感)搜索。

这就是区别。如果你使用

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

然后你会得到一个0而不是-1的索引(因此它与Contains一致)。

Contains没有文化敏感的超载;我不清楚你是否可以可靠地使用IndexOf,但是CompareInfo类给了一些更多选项。 (我真的不太了解文化比较的细节,尤其是RTL文本。我只知道它很复杂!)

相关问题