c#中indexof方法的奇怪行为

本文关键字:indexof 方法 | 更新日期: 2023-09-27 18:13:17

我有这个代码,其中entities是通过参数接收的List <String>。我试图以任何可能的方式将entities[x]转换为字符串,即使它已经是字符串。我也检查了entities[x] is String总是返回true

for(int x = 0; x < entities.Count; x++)
{
    Console.WriteLine(entities[x] + " " +  "a pencil g smartboard tabletc pencil ".IndexOf(entities[x]));
}

结果是:

pencil 30
smartboard 11
tabletc -1

为什么"平板电脑"的索引返回-1 ?

c#中indexof方法的奇怪行为

您输入的字符串以退格字符开始,ASCII 8。

试试

"... 'btabletc ...".IndexOf(entities[2])

其中'b表示退格字符

以下程序输出

pencil 2
smartboard 11
tabletc 22

程序是可编译的。如果您尝试它,输出是什么?

using System;
using System.Collections.Generic;
namespace Demo
{
    class Program
    {
        void test()
        {
            var entities = new List<string> { "pencil", "smartboard", "tabletc" };
            for (int x = 0; x < entities.Count; x++)
                Console.WriteLine(entities[x] + " " +  "a pencil g smartboard tabletc pencil ".IndexOf(entities[x]));
        }
        static void Main()
        {
            new Program().test();
        }
    }
}

如果按预期工作,下一步就是查看输入的不同之处。


[编辑]

我看了你的粘贴代码,我用我创建的测试文件尝试了它,它工作正常。然而,当我复制并粘贴(从pastebin)说方法输出的注释时,我发现其中嵌入了一个BEL字符和一个BS字符:

    //this method outputs:
    //3
   //pencil
    //smartboard
   //tabletc

你在那里看不到这些字符,但是如果你复制/粘贴到notepad++中,它们就会出现。看起来很可疑,它们可能是从文件中读取的,并且是字符串的一部分,但它们不可见。但是它们会影响字符串匹配。

这些字符在我将它们粘贴到SO上时已被剥离,但它们在pastebin上,第31 - 35行。尝试复制/粘贴到notepad++中。