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

时间:2016-06-24 14:17:42

标签: c# .net string .net-4.5 indexof

var str = "GB29NWBK60161331926819"

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

提供输出

  

0   1   2   3   4   五   1   7   8   9   10   8   10   13   13   10   3   2   8   19   10   3

我在期待

  

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

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

3 个答案:

答案 0 :(得分:7)

它为您提供字符串中第一次出现的索引。

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

这是Documentation对此方法所说的内容:

  

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

编辑:ElementAt(int index)会期望一个索引。使用它会在第一个字母G崩溃。它需要UTF-16-Code,它是71并突破界限。

你的期望会因此而得到满足:

var str = "GB29NWBK60161331926819";

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您的预期输出仅对由唯一字符组成的字符串有效。

这绝对不是一个错误,因为你的字符串有重复。 IndexOf无法区分B中的GBB部分中的BWBK,为您提供字符串中字符的第一个索引。