找不到“ IndexOutOfRangeException”的原因

时间:2019-08-22 20:39:58

标签: c# arrays indexoutofrangeexception

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

我在第5行出现异常(linesRead [i] [0])。对我来说,最奇怪的部分是,当我尝试添加用于调试Console.WriteLine(linesRead [0] [0])/ Console.WriteLine(linesRead [linesRead.lines [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--|

4 个答案:

答案 0 :(得分:3)

if (linesRead[i][0] == '5')将在行为空时触发此错误。

尝试

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

相反。

答案 1 :(得分: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
    }
}

答案 2 :(得分:1)

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

您可以使用以下命令跳过这些行:

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

答案 3 :(得分:1)

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

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