好的,所以我试图通过C#加载一堆配置文件,当我尝试启动程序时,我不断收到此错误。
C:\C#FILES>program.exe
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the boun
ds of the array.
at ConsoleApplication2.Program.loadAccounts()
at ConsoleApplication2.Program.Main(String[] args)
C:\C#FILES>
我已经调查过,我认为它与文件中的帐户格式有关 我想知道正确的方法是什么,我已经尝试了各种我能想到的方式
这是加载帐户方法
private static void loadAccounts()
{
using (TextReader tr = new StreamReader("accounts.txt"))
{
string line = null;
while ((line = tr.ReadLine()) != null)
{
String[] details = line.Split('\t');
accounts.Add(details[0] + ":" + details[1]);
}
}
}
accounts.txt部分是我不确定的部分,我认为它将如下 用户名(标签)的密码 像这样
username password
然而它给出了上面显示的错误 有谁知道适当的帐户格式应该是什么?
答案 0 :(得分:2)
你得到一个IndexOutOfRangeException,这表明details
只有一个条目 - 这意味着该行上没有标签。
我建议您在拆分之前打印出问题的行,这样您就可以看到导致问题的行。或者可能有条件地做:
while ((line = tr.ReadLine()) != null)
{
String[] details = line.Split('\t');
if (details.Length == 1)
{
// Or log it, or whatever...
Console.WriteLine("Input error: no tab in line '{0}'", line);
}
else
{
accounts.Add(details[0] + ":" + details[1]);
}
}
答案 1 :(得分:0)
这是因为您从输入中分割的行不包含所请求的元素。
由于.NET处理0
的方式,数组中的第一个(读取:Split
)元素不太可能是导致问题的原因。
您是否检查过输入文件中是否有空行?单个空白行(即使在文件末尾)也会导致此问题。
您可以添加多项检查,例如..
if(!string.IsNullOrWhitespace(line)) ...
或
if(details.Length > 1)
这些是一些检查,我建议实施其中之一或两者(还有更多需要考虑的因素),否则你只是盲目地信任输入值,这不是一般的好习惯。