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 ?
您输入的字符串以退格字符开始,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++中。