.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.LastIndexOf
的startIndex
参数需要是字符串的长度,因为是向后查找。这对我有用:
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
在我们的应用程序中,我想成为好公民,并从文化感知字符串比较转移到 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.LastIndexOf
的startIndex
参数需要是字符串的长度,因为是向后查找。这对我有用:
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