![](/img/trans.png)
[英]System.InvalidOperationException when getting a List with an ApiController
[英]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
。 最后,您的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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.