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

时间:2016-06-29 00:23:21

标签: c# .net indexof lastindexof invariantculture

在我们的应用程序中,我希望成为一名优秀的公民,并从文化感知字符串比较转移到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

这到底是怎么回事?

LastIndexOf如何能够让我找不到'当IndexOf具有相同的文化和相同的输入时,我发现了一些'?

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

2 个答案:

答案 0 :(得分:2)

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

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

它与IndexOf一样返回6。

答案 1 :(得分:0)

我错了..

LastIndexOf正在从源头搜索到开头。 所以当我设置startPosition = 0时,它从位置0变为0并且什么都没找到。

LastIndexOf的正确调用是:

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