2016-12-03 61 views
0

我有以下代碼。我一直在嘗試調試標題中提到的錯誤,現在4個小時,但不幸的是,在這一點上我什麼都不瞭解。我來自Python,非常抱歉,如果這件事是基本的。此外,代碼並不是最好的 - 在我的調試嘗試中,它可能變得沒有組織和不必要的點。嘗試對列表進行foreach循環時獲取System.InvalidOperationException?

代碼上下文:該程序的創建是爲了模擬在視頻遊戲中創建Galaxy Gate(門戶網站,如果你喜歡的話),嘗試重新創建成本 - 看看你需要多少費用才能檢查使用實際的遊戲幣。

請注意,此錯誤始終發生在for-each循環的第二次執行時(當列表中沒有更多值被迭代時 - 我猜:我可能是錯的)。

截圖錯誤:http://prntscr.com/dep0xv

這是我收到錯誤的地方,在每個循環:

List<int> partsBuiltTwo = new List<int>(); 
partsBuiltTwo = ggPart(gateEnd, multiplier, partsBuilt); 

if (!(partsBuiltTwo.Count == 0)) 
{ 
    foreach (int part in partsBuiltTwo) //error 
    { 
     partsBuilt.Add(part); 
     label28.Text = (partsBuilt.Count).ToString(); 
    } 
} 

這是函數ggPart被稱爲:

private List<int> ggPart(int gateEnd, int multiplier, List<int> partsBuilt) 
    { 
     int generatedPart = random.Next(1, gateEnd); //Generate part 

     if (multiplier > 1) //If we have a multiplier, use it on gate part 
     { 
      if (partsBuilt.Contains(generatedPart)) //If we hit a multiplier with a multiplier, give multiplier parts 
      { 
       for (int i = 0; i < multiplier; i++) //Give us as many parts as multipliers 
       { 
        if (partsBuilt.Count < gateEnd) 
        { 
         while (partsBuilt.Contains(generatedPart)) 
         { 
          generatedPart = random.Next(1, gateEnd); 
         } 
         partsBuilt.Add(generatedPart); 
         updateReceivedValues(5, multiplier); 
         label26.Text = "x" + multiplier.ToString(); 
        } 
        else 
        { 
         continue; 
        } 
       } 
      } 
      else //If we hit a multiplier on a normal part, give us multiplier + 1 parts 
      { 
       for (int i = 0; i < multiplier + 1; i++) //Give us as many parts as multipliers 
       { 
        if (partsBuilt.Count < gateEnd) 
        { 
         while (partsBuilt.Contains(generatedPart)) 
         { 
          generatedPart = random.Next(1, gateEnd); 
         } 
         partsBuilt.Add(generatedPart); 
         updateReceivedValues(5, multiplier); 
         label26.Text = "x" + multiplier.ToString(); 
        } 
        else 
        { 
         continue; 
        } 
       } 
      } 
      multiplier = 1; 
      label26.Text = "x" + multiplier.ToString(); 
     } 
     else //If we don't have a multiplier and get a gate parts 
     { 
      if (partsBuilt.Contains(generatedPart)) //If we get a part we already have 
      { 
       multiplier += 1; //Increase multiplier by 1 
      } 
      else //If we get a part we don't already have 
      { 
       partsBuilt.Add(generatedPart); //Add part 
       updateReceivedValues(5, multiplier); 
       label26.Text = "x" + multiplier.ToString(); 
      } 
     } 

     //int[] newArray = partsBuilt; 

     return partsBuilt; 
     //built += 1; 
    } 

爲什麼我得到這個錯誤,我該如何解決?請儘可能描述,或者提供一種方法來調試,因爲我無法繼續我花了整整一天的程序,除非我修復這個錯誤。

此外,任何提示,讚賞。

+1

「plz向德codez !! 1」 - 「號」 –

+0

@MDXF哦,是的,我應該考慮修復那部分... –

回答

0

您正在發送partsBuiltggPart方法作爲參數,並在方法內更新並返回相同。最後您將返回值分配給partsBuiltTwo。最後你的partsBuiltpartsBuiltTwo都是一樣的。 下一個循環你迭代partsBuiltTwo,並增加partsBuilt是一樣的迭代和更新相同的這是不允許有foreach

if (!(partsBuiltTwo.Count == 0)) 
{ 
    foreach (int part in partsBuiltTwo) 
    { 
     //partsBuiltTwo and partsBuilt are same you don't need to add items again back to partsBuilt 
     //partsBuilt.Add(part); 
     label28.Text = (partsBuilt.Count).ToString(); 
    } 
} 
+0

謝謝。這是有道理的,所以我擺脫了partsBuiltTwo。 (這是爲了調試)。畢竟,foreach循環並不需要。 –