C# 列表<;字符串>;返回-1的对象索引。怎么用?

C# 列表<;字符串>;返回-1的对象索引。怎么用?,c#,list,indexof,C#,List,Indexof,这让我很困惑。不知何故,我的List对象的IndexOf(string)方法返回了-1,即使值在列表中很明显 protected readonly List<string> validPrefixes = new List<string>() { "01", "02", "03", "FE", "E1", "E2", "E3" }; protected readonly List validPrefixes=new List(){“01”、“02”、“03”、“FE”、

这让我很困惑。不知何故,我的
List
对象的
IndexOf(string)
方法返回了-1,即使值在列表中很明显

protected readonly List<string> validPrefixes = new List<string>() { "01", "02", "03", "FE", "E1", "E2", "E3" };
protected readonly List validPrefixes=new List(){“01”、“02”、“03”、“FE”、“E1”、“E2”、“E3”};
字符串前缀
为“01”

validPrefixes
索引0为“01”

indexOf
为-1。嗯。。。怎么做


我不知道为什么,但我的调试器好像在骗我。我相信发生的事情是,
validPrefixes
中的值都需要小写,因为我以前在代码中使用了
ToLower()
方法,它影响了
string addr
变量

出于某种原因,我的调试器似乎在某种程度上混合了循环的迭代。我只能通过使用
string.tocharray()
方法将变量分配给
char[]
来判断发生了什么

(“01”).ToCharArray()
正在返回
['0','1']
prefix.ToCharArra()
正在返回
['f','e']

不知何故,调试器告诉我
prefix
的值是
“01”
,而
prefix.tocharray()
的值是
['f','e']
。后者是来自不同循环迭代的值

因为我检查的是
“FE”
而不是
“FE”
,所以我的代码不起作用,但我的调试器并没有确切地告诉我这一点

我正在使用Xamarin iOS构建主机在Windows PC上使用Xamarin开发iOS。在过去的开发中,我遇到过一些奇怪的事情,特别是在调试和断点方面。所以我要责备Xamarin构建主机


感谢@Amit和@DavidW帮助我得出这个结论。

出于好奇,如果您
有效的前缀。IndexOf(“01”)
?我们没有处理像零和字母“O”这样的事情吗?所以说
前缀可能是安全的=“01”
。。。现在,请比较它们的长度…这可能没有任何区别,但只是为了让我笑一下,我会在addr上做一个getBytes,并将它们与“01”的字节进行比较。另一个需要查找的是多线程问题。在处理这些行的过程中,是否可能有一个相关变量发生变化?(例如,
addr
),这可能会使您认为值等于当前值,但事实并非如此。您是否调试了发行版或调试了程序集?下次执行
validPrefixes.IndexOf(前缀,StringComparison.OrdinalIgnoreCase)
,这将使IndexOf也不区分大小写,并且不会强制您使用调试程序集调试
ToUpper
ToLower
@Kai生成额外的字符串。