这是静态int方法的一部分:
int answer = 0;
foreach(int getal in savedNumbers)
{
Console.WriteLine(getal);
answer = answer + getal;
savedNumbers.Clear(); // after this line, I'm getting an error.
}
return answer;
请帮帮我...我不知道为什么savedNumbers.Clear()不能在那条线上工作。
编辑:谢谢,问题解决了。答案 0 :(得分:2)
You can't modify the collection while enumerating over it
。所以,例外是有效的。完成枚举后清除。
答案 1 :(得分:0)
在迭代同一个列表时,您无法修改列表。
答案 2 :(得分:0)
您正在清点列表中清除它。当您处于枚举过程中时,无法修改列表。
int answer = 0;
foreach(int getal in savedNumbers)
{
Console.WriteLine(getal);
answer = answer + getal;
}
savedNumbers.Clear();
return answer;
答案 3 :(得分:0)
迭代时你无法改变列表/集合,而你可以使用如下所述的循环:
for (int i = 0 i < savedNumbers.Count; i++)
{
var getal = savedNumbers[i];
Console.WriteLine(getal);
answer = answer + getal;
savedNumbers.Clear();
}
在枚举时不能修改集合。即使没有考虑线程问题,该规则也存在。来自MSDN:
只要集合保持不变,枚举器仍然有效。如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且其行为未定义。
参考文献:
答案 4 :(得分:0)
Msdn says:foreach语句用于迭代集合以获取所需信息,但不应用于更改集合的内容以避免不可预测的副作用< / p>