对于每个string.IndexOf(char)错误

本文关键字:char 错误 IndexOf 于每个 string | 更新日期: 2023-09-27 17:49:27

var str = "GB29NWBK60161331926819"
foreach (var item in str.ToCharArray())
{
    Debug.WriteLine(str.IndexOf(item));
}

给出输出

0123.451789108101313103.2819103

I was expected

0 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

这是一个错误还是我的假设不正确?

对于每个string.IndexOf(char)错误

它给出字符串中第一个出现的索引。

查看你的输入字符串,当它到达1时,它给你索引10,当它到达下一个1时,它再次给你索引10。

这是文档对这个方法的说明:

报告指定字符串在此实例中第一次出现的从零开始的索引。

EDIT: ElementAt(int index)期望索引。使用它会在第一个字母G时崩溃。它会接受它的UTF-16-Code(71)并跳出边界。

你的期望会被满足:

var str = "GB29NWBK60161331926819";
for (int i = 0; i < str.Length; i++)
{
    Debug.WriteLine(i);
}

您的假设是不正确的,因为函数返回字符串中匹配的第一个事件,如果函数不匹配,它将返回-1

期望的输出只有对于由唯一字符组成的字符串才是正确的。

这绝对不是一个bug,因为你的字符串有重复项。IndexOf将不区分GB中的BBWBK部分中的B,为您提供字符串中字符的第一个索引。