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生成额外的字符串。