2015-02-07 87 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(':'); 
相關問題