繁体   English   中英

尝试foreach遍历列表时获取System.InvalidOperationException吗?

[英]Getting System.InvalidOperationException when Trying to foreach loop over a List?

我有以下代码。 我已经尝试调试标题中指出的错误已有4个小时了,但是不幸的是,目前我仍然一无所知。 我来自Python,非常抱歉,如果这些东西很简单。 另外,代码也不是最好的-在我尝试对其进行调试时,它有时可能变得杂乱无章且不必要。

代码上下文:创建该程序是为了模拟在视频游戏中创建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;
    }

为什么会出现此错误,该如何解决? 请尽可能描述一下,或者为我提供调试方法,因为除非修复此错误,否则我无法继续花一整天的程序。

此外,任何提示,不胜感激。

您正在将partsBuilt作为参数发送到ggPart方法,并且在方法内部将其更新并返回相同的内容。 最后,您将返回的值分配给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();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM