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

gil*_* kr 6 .net arabic

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

var text = "?????? ???? ???? ?? ??";
var word = "?????";
bool exist = text.Contains(word);
int index = text.IndexOf(word);
Run Code Online (Sandbox Code Playgroud)

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

怎么会这样?

Jon*_*eet 9

Contains 对文化不敏感:

此方法执行序数(区分大小写和文化不敏感)比较.

IndexOf 文化敏感:

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

这就是区别.如果你使用

int index = text.IndexOf(word, StringComparison.Ordinal);
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个0而不是-1的索引(所以它是一致的Contains).

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