C#System.IndexOutOfRangeException错误

时间:2015-02-07 14:40:10

标签: c# error-handling

好的,所以我正在构建一个项目,你导入一个代理列表,但由于某种原因,我得到一个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);
            }
        }
    }

单击“继续”后,它将关闭应用程序。我不确定它是否是我代码的一种形式?

2 个答案:

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