2015-02-07 81 views
-2

好的,所以我目前正在建立一个项目,您可以导入代理的列表,但由于某种原因,我得到一个System.IndexOutOfRangeException错误,现在真的让我感到困扰。C#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

你调试了吗?如果没有,这是学习如何使用调试器的最佳时机。 – nvoigt 2015-02-07 14:40:55

+0

是啊这是我怎么知道我得到的错误,我想“/ – JohnDueDueDue 2015-02-07 14:42:50

+0

那么哪一行你会得到错误?那个行中变量的值是多少?如果你用常量索引一个数组,其实*有*那么多条目? – nvoigt 2015-02-07 14:43:57

回答

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 
} 

在这里,你不知道你的whethere字符串数组实际上包含data[0],,data[2]data[3]位置仍然存在。更多关于NullReferenceException

解决方案:

检查阵列的Lengthproperty验证您在这些药水有数据

因此,像

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); [这就是你期望从这个功能]

+0

对不起,我对这个真的很陌生,不太了解多少你是否有Skype或ICQ? – JohnDueDueDue 2015-02-07 14:56:02

+0

你可以通过提供的帮助来解决问题:) – 2015-02-07 14:56:37

+0

hmm oke可以解决错误,但它不会将实际的代理列表加载到程序中 – JohnDueDueDue 2015-02-07 15:00:21

0

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

String[] data = line.Split(':'); 
相关问题