0

这是静态 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() 不在该行工作。

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

4

5 回答 5

2

You can't modify the collection while enumerating over it. 所以,例外是有效的。完成枚举后清除。

于 2012-10-14T18:14:10.327 回答
0

您不能在迭代同一列表时修改列表。

于 2012-10-14T18:13:32.990 回答
0

您正在枚举它的中间清除列表。枚举过程中不能修改列表。

int answer = 0;
foreach(int getal in savedNumbers)
{
    Console.WriteLine(getal);
    answer = answer + getal;
}
savedNumbers.Clear(); 
return answer;
于 2012-10-14T18:13:35.390 回答
0

迭代时,您无法更改列表/集合,而您可以使用循环执行相同的操作,如下所述:

for (int i = 0 i < savedNumbers.Count; i++)
{
    var getal = savedNumbers[i];
    Console.WriteLine(getal);
    answer = answer + getal;
    savedNumbers.Clear();
}

枚举时不能修改集合。即使没有考虑线程问题,该规则仍然存在。来自MSDN

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

参考:

  1. 在枚举时修改 .NET 字典
  2. 为什么通过集合枚举会引发异常但遍历其项目不会
于 2012-10-14T18:14:43.690 回答
0

msdn 说:foreach 语句用于遍历集合以获取所需的信息,但不应用于更改集合的内容,以免产生不可预知的副作用

于 2012-10-14T18:14:50.337 回答