在我们的应用程序中,我希望成为一名优秀的公民,并从文化感知字符串比较转移到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吗?或者我错过了什么?
答案 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