【问题标题】:Can't find the reason of "IndexOutOfRangeException" [duplicate]找不到“IndexOutOfRangeException”的原因 [重复]
【发布时间】:2019-12-28 05:11:39
【问题描述】:

我遇到了一个关于 indexOutOfBounds 异常的奇怪问题。我需要读取数组中每个字符串的第一个字符。

我在第 5 行 (linesRead[i][0]) 出现异常。对我来说最奇怪的是,当我尝试添加用于调试 Console.WriteLine(linesRead[0][0]) / Console.WriteLine(linesRead[linesRead.Length-1][0]) 的行时,它工作得很好。

string[] linesRead = System.IO.File.ReadAllLines(@"test.txt"); //Just a bunch of lines

for (int i = 0; i < linesRead.Length; i++)
{
    if (linesRead[i][0] == '5')
    {
        //Do stuff
    }
}

The text inside of test.txt:
5|f-----g-----c---g-----a---|

6|--c-----------------------|
5|---Aa-f-----g-----c-------|

5|------ccdf-ff-----g-----c-|

6|--------------c-----------|
5|--g-----a------Aa-f-----g-|

5|----c-------------ccdf-f--|

【问题讨论】:

  • 这些行是什么?我们需要一个minimal reproducible example。偶然的一行是空的吗?
  • 第一行必须为空。至少我想不出任何其他原因。
  • 其实任何行为空都会触发错误。
  • 刚刚添加的文本中有空行。使用调试器来识别这些东西。 linesRead[i] 有一个值,您可以在代码中设置断点并使用监视窗口找出该值是什么。一些人发现在某些时候,它是一个空字符串。你瞧:你的一些行是空的。

标签: c# arrays indexoutofrangeexception


【解决方案1】:

如果您有一个空字符串,则字符 linesRead[i][0]'\0'(用于标记字符串的结尾)。

如果将第 5 行更改为 if(linesRead[i].Length &gt; 0 &amp;&amp; linesRead[i][0] == '5')),则可以跳过空字符串情况。

【讨论】:

    【解决方案2】:

    我会空/空检查每一行,以防万一。

    var linesRead = System.IO.File.ReadAllLines(@"test.txt"); //Just a bunch of lines
    
    foreach (var line in linesRead)
    {
        if (!string.IsNullOrEmpty(line) && line[0] == '5')
        {
            //Do stuff
        }
    }
    

    【讨论】:

      【解决方案3】:

      if (linesRead[i][0] == '5')如果一行是空的就会触发这个错误。

      试试

      if (linesRead[i].StartsWith("5"))
      

      改为。

      【讨论】:

        【解决方案4】:

        这意味着您的文件中某处有一个空行。

        你可以跳过这些行:

        if (linesRead[i].Length > 0 && linesRead[i][0] == '5')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          相关资源
          最近更新 更多