C# System.IndexOutOfRangeException 错误
C# System.IndexOutOfRangeException Error
好的,所以我目前正在构建一个项目,您可以在其中导入代理列表,但由于某种原因,我收到了一个 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);
}
}
}
单击“继续”后,它会关闭应用程序。我不确定这是否是我的代码形式?
以下代码集问题仍然存在[参考附件图片]
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);
[认为这就是您对这个函数的期望]
你应该检查数据结果的长度。
String[] data = line.Split(':');
好的,所以我目前正在构建一个项目,您可以在其中导入代理列表,但由于某种原因,我收到了一个 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);
}
}
}
单击“继续”后,它会关闭应用程序。我不确定这是否是我的代码形式?
以下代码集问题仍然存在[参考附件图片]
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);
[认为这就是您对这个函数的期望]
你应该检查数据结果的长度。
String[] data = line.Split(':');