我尝试在C#中清理/重置/清除列表,但它给了我InvalidOperationException错误

时间:2012-10-14 18:11:27

标签: c# list invalidoperationexception

这是静态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()不能在那条线上工作。

编辑:谢谢,问题解决了。

5 个答案:

答案 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

  

只要集合保持不变,枚举器仍然有效。如果对集合进行了更改,例如添加,修改或删除元素,则枚举数将无法恢复,并且其行为未定义。

参考文献:

  1. Modifying .NET Dictionary while Enumerating through it
  2. Why does enumerating through a collection throw an exception but looping through its items does not

答案 4 :(得分:0)

Msdn says:foreach语句用于迭代集合以获取所需信息,但不应用于更改集合的内容以避免不可预测的副作用< / p>