尝试对列表进行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;
}
为什么我得到这个错误,我该如何解决?请尽可能描述,或者提供一种方法来调试,因为我无法继续我花了整整一天的程序,除非我修复这个错误。
此外,任何提示,赞赏。
您正在发送partsBuilt
至ggPart
方法作为参数,并在方法内更新并返回相同。最后您将返回值分配给partsBuiltTwo
。最后你的partsBuilt
和partsBuiltTwo
都是一样的。 下一个循环你迭代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();
}
}
谢谢。这是有道理的,所以我摆脱了partsBuiltTwo。 (这是为了调试)。毕竟,foreach循环并不需要。 –
“plz向德codez !! 1” - “号” –
@MDXF哦,是的,我应该考虑修复那部分... –