.NET CultureInfo.InvariantCulture.CompareInfo IndexOf 与 LastIndexOf - 发生了什么事?

.NET CultureInfo.InvariantCulture.CompareInfo IndexOf vs LastIndexOf - What is going on?

在我们的应用程序中,我想成为好公民,并从文化感知字符串比较转移到 InvariantCulture 中的一些确定性比较,但正因为如此,我的应用程序开始因无限循环而崩溃。

一切都归结于此。我在 Immediate Window:

中对此进行了评估
CultureInfo.InvariantCulture.CompareInfo.IndexOf("(např. BroadSwo", " ", 0, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace);
6

CultureInfo.InvariantCulture.CompareInfo.LastIndexOf("(např. BroadSwo", " ", 0, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace);
-1

这到底是怎么回事?

当具有相同文化和相同输入的 IndexOf 给我 'found some' 时,LastIndexOf 如何给我 'not found'?

这是BUG吗?或者我缺少什么?

好像CultureInfo.InvariantCulture.CompareInfo.LastIndexOfstartIndex参数需要是字符串的长度,因为是向后查找。这对我有用:

CultureInfo.InvariantCulture.CompareInfo.LastIndexOf("(např. BroadSwo", " ", 15, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace)

它像 IndexOf 一样返回 6。

我错了..

LastIndexOf 正在从源的末尾搜索到开头。 因此,当我设置 startPosition = 0 时,它会从位置 0 移动到 0,但什么也找不到。

LastIndexOf 的正确调用是:

CultureInfo.InvariantCulture.CompareInfo.LastIndexOf("(např. BroadSwo", " ", "(např. BroadSwo".Length - 1, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace);
6