找不到 "IndexOutOfRangeException" 的原因
Can't find the reason of "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--|
这意味着您的文件中某处有一个空行。
您可以跳过这些行:
if (linesRead[i].Length > 0 && linesRead[i][0] == '5')
if (linesRead[i][0] == '5')
如果一行为空将触发此错误。
尝试
if (linesRead[i].StartsWith("5"))
相反。
我会null/empty检查每一行,以防万一。
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
}
}
如果您有一个空字符串,字符 linesRead[i][0]
是 '[=11=]'
(用于标记字符串的结尾)。
如果将第 5 行更改为 if(linesRead[i].Length > 0 && linesRead[i][0] == '5'))
,则可以跳过空字符串。
我遇到了 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--|
这意味着您的文件中某处有一个空行。
您可以跳过这些行:
if (linesRead[i].Length > 0 && linesRead[i][0] == '5')
if (linesRead[i][0] == '5')
如果一行为空将触发此错误。
尝试
if (linesRead[i].StartsWith("5"))
相反。
我会null/empty检查每一行,以防万一。
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
}
}
如果您有一个空字符串,字符 linesRead[i][0]
是 '[=11=]'
(用于标记字符串的结尾)。
如果将第 5 行更改为 if(linesRead[i].Length > 0 && linesRead[i][0] == '5'))
,则可以跳过空字符串。