【问题标题】:List<string> object IndexOf returning -1. How?List<string> 对象 IndexOf 返回 -1。如何?
【发布时间】:2015-06-11 21:54:03
【问题描述】:

这让我很困惑。我的List&lt;string&gt; 对象的IndexOf(string) 方法以某种方式返回-1,即使该值在列表中很明显。

protected readonly List<string> validPrefixes = new List<string>() { "01", "02", "03", "FE", "E1", "E2", "E3" };

string prefix 是“01”

validPrefixes 索引 0 是“01”。

indexOf 是 -1。嗯……怎么样?

【问题讨论】:

  • 出于好奇,如果你validPrefixes.IndexOf("01")会发生什么?
  • 我们不处理诸如零和字母“O”之类的事情吗?
  • 所以可以肯定地说prefix!="01"...现在,请比较它们的长度...
  • 它可能没有任何区别,但只是为了笑我会在 addr 上做一个 getBytes 并将它们与“01”的字节进行比较
  • 要寻找的另一件事是多线程问题。在处理这些行期间,相关变量之一是否可能发生变化? (例如,addr..)这可能会让您认为值曾经等于当前值,但实际上并非如此。

标签: c# list indexof


【解决方案1】:

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

由于某种原因,我的调试器似乎以某种方式混合了循环的迭代。我只能通过使用string.ToCharArray() 方法将变量分配给char[] 来判断这种情况。

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

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

由于我检查的是 "FE" 而不是 "fe",因此我的代码无法正常工作,但我的调试器并没有准确地告诉我这一点。

我正在使用 Xamarin iOS Build Host 在我的 Windows PC 上使用 Xamarin 进行 iOS 开发。过去,我通过这样的开发遇到过奇怪的事情,尤其是在调试和断点方面。所以我要责怪 Xamarin Build Host。

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

【讨论】:

  • 您是否调试过发行版或程序集?
  • 下次做validPrefixes.IndexOf(prefix, StringComparison.OrdinalIgnoreCase),这将使IndexOf 也不区分大小写,并且它不会强迫您使用ToUpperToLower 生成额外的字符串。
  • @Kai 我使用调试程序集进行了调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-17
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多