尝试对列表进行foreach循环时获取System.InvalidOperationException?

问题描述:

我有以下代码。我一直在尝试调试标题中提到的错误,现在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哦,是的,我应该考虑修复那部分... –

您正在发送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循环并不需要。 –