好的,所以我正在构建一个项目,你导入一个代理列表,但由于某种原因,我得到一个System.IndexOutOfRangeException错误,这真的让我烦恼。
所以这是它显示的代码。
private void LoadProxies()
{
accChecker.Proxies.Clear();
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Title = "Choose a file containing a list of proxies...";
ofd.Filter = "Text Files (*.txt)|*.txt";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
foreach (String line in File.ReadAllLines(ofd.FileName))
{
if (line.Contains(":"))
{
String[] data = line.Split(':');
if (!Properties.Settings.Default.ProxiesLogin)
accChecker.QueueProxy(data[0], data[1]);
else
accChecker.QueueProxy(data[0], data[1], data[2], data[3]);
}
}
loadProxiesBtn.Text = String.Format("Load Proxies ({0})", accChecker.Proxies.Count);
if (accChecker.Accounts.Count > 0 && (accChecker.Proxies.Count > 0 || !loadProxiesBtn.Visible))
checkBtn.Enabled = true;
else
checkBtn.Enabled = false;
UpdateInfos(true);
}
}
}
单击“继续”后,它将关闭应用程序。我不确定它是否是我代码的一种形式?
答案 0 :(得分:0)
您的问题仍然存在以下代码集[参考附件picture]
if (line.Contains(":"))
{
String[] data = line.Split(':');
if (!Properties.Settings.Default.ProxiesLogin)
accChecker.QueueProxy(data[0], data[1]);
else
accChecker.QueueProxy(data[0], data[1], data[2], data[3]); // HERE
}
此处您不知道您的字符串数组实际上包含data[0]
,data[1]
,data[2]
或data[3]
位置。有关NullReferenceException
解决方案:
检查您的阵列Length
property以验证您是否拥有这些药水中的数据
类似
if (!Properties.Settings.Default.ProxiesLogin){
if(data.Length > 1){
accChecker.QueueProxy(data[0], data[1]);
}
}
else{
if(data.Length > 3){
accChecker.QueueProxy(data[0], data[1], data[2], data[3]);
}
}
这无法解决您的应用程序逻辑问题。你将不得不实现一些逻辑来面对这个长度条件失败。类似于UpdateInfos(false);
[想到你对这个功能的期望]
答案 1 :(得分:0)
您应该检查数据结果的长度。
String[] data = line.Split(':');