关于c#:集合被修改;

Collection was modified; enumeration operation may not execute. why?

本问题已经有最佳答案,请猛点这里访问。

抱歉,我搜索了这个错误,但情况不同,对我没有帮助…

我想做一个宇宙飞船入侵游戏,我把所有的子弹列成了一个picutrebox。

1
List<PictureBox> all_bullets = new List<PictureBox>();

当您按下空格键(Fire按钮)时,将创建一个新的项目符号,并将其添加到表单控件和列表中的所有项目符号中。

当butle从if (_bullet.Location.Y <= 0)的形式出现时,该代码(以下)中的u项目符号应从all_bullets列表中删除。

1
2
3
4
5
6
7
8
9
10
11
private void tmr_bullets_Tick(object sender, EventArgs e)
{
        foreach (PictureBox _bullet in all_bullets)
        {
            _bullet.Location = new Point(_bullet.Location.X, _bullet.Location.Y - 20);

            if (_bullet.Location.Y <= 0)
            {  all_bullets.Remove(_bullet);  }
        }

        nr_bullets.Text = Convert.ToString(all_bullets.Count);

错误:

Collection was modified; enumeration operation may not execute.

很抱歉,如果它被张贴了,但我没有找到我需要的。


枚举集合时不能修改它

1
all_bullets.Remove(_bullet);

这将在枚举集合时修改(从集合中删除一个项)

你可以用黑客来做这个

1
foreach (PictureBox _bullet in all_bullets.ToList())