1

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

这一切都归结为这一点。我在即时窗口中对此进行了评估:

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 给我“找到一些”时,LastIndexOf 如何给我“未找到”?

这是一个BUG吗?或者我错过了什么?

4

2 回答 2

3

看来startIndex参数 ofCultureInfo.InvariantCulture.CompareInfo.LastIndexOf需要是字符串的长度,因为它是向后搜索的。这对我有用:

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

它和 6 一样返回IndexOf

于 2016-06-29T00:31:24.303 回答
1

我错了..

LastIndexOf 是从源的末尾到开头的搜索。因此,当我设置 startPosition = 0 时,它会从位置 0 转到 0 并且什么也找不到。

LastIndexOf 的正确调用是:

CultureInfo.InvariantCulture.CompareInfo.LastIndexOf("(např. BroadSwo", " ", "(např. BroadSwo".Length - 1, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace);
6
于 2016-06-29T00:48:38.483 回答