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