找不到“IndexOutOfRangeException”的原因

我遇到了一个关于 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--|


繁星点点滴滴
浏览 86回答 4
4回答

aluckdog

if (linesRead[i][0] == '5')如果行为空,将触发此错误。尝试if&nbsp;(linesRead[i].StartsWith("5"))反而。

叮当猫咪

我会空/空检查每一行,以防万一。var linesRead = System.IO.File.ReadAllLines(@"test.txt"); //Just a bunch of linesforeach (var line in linesRead){&nbsp; &nbsp; if (!string.IsNullOrEmpty(line) && line[0] == '5')&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Do stuff&nbsp; &nbsp; }}

一只名叫tom的猫

如果您有一个空字符串,则该字符linesRead[i][0]是'\0'(用于标记字符串的结尾)。如果将第 5 行更改为,if(linesRead[i].Length > 0 && linesRead[i][0] == '5'))则可以跳过空字符串情况。

肥皂起泡泡

这意味着您的文件中某处有一个空行。您可以使用以下命令跳过这些行:if&nbsp;(linesRead[i].Length&nbsp;>&nbsp;0&nbsp;&&&nbsp;linesRead[i][0]&nbsp;==&nbsp;'5')
打开App,查看更多内容
随时随地看视频慕课网APP