【问题标题】:C# System.IndexOutOfRangeException ErrorC# System.IndexOutOfRangeException 错误
【发布时间】:2015-02-07 14:40:09
【问题描述】:

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

单击继续时,它会关闭应用程序。我不确定这是否是我的代码的一种形式?

【问题讨论】:

  • 你调试了吗?如果没有,这是学习如何使用调试器的最佳时机。
  • 是的,我就是这样知道我收到了我猜的错误“/
  • 那么你在哪一行得到错误?该行中变量的值是多少?如果你用一个常量索引一个数组,它实际上那么多条目吗?
  • 这是我得到的确切错误的图像。 i.imgur.com/zDyNEIX.png

标签: c# error-handling


【解决方案1】:

以下代码集仍然存在您的问题[参考附加的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); [认为这就是您对这个函数的期望]

【讨论】:

  • 对不起,我真的很陌生,不太了解您是否有Skype或ICQ?
  • 您可以在提供的帮助下解决问题:)
  • hmm oke 解决了错误,但它没有将实际的代理列表加载到程序中。
  • 参考更新后的答案 :) 您需要处理这种情况,因为您的参数与所需条件不匹配
  • 我尝试让程序加载代理文件,然后向该程序所针对的站点发送请求,但仍然没有成功。如果您有 Skype 或 ICQ,我可以向您展示或更深入地解释。
【解决方案2】:

你应该检查数据结果的长度。

  String[] data = line.Split(':');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2013-03-05
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多