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(':');