收集被修改;枚举操作可能无法执行。为什么?

时间:2015-06-25 10:45:25

标签: c# .net enumeration

抱歉,我搜索了这个错误,但这是一个不同的情况,它对我没有帮助......

我想制作一个宇宙飞船入侵游戏,我将所有子弹列表作为PicutreBox。

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

当您按空格按钮(开火按钮)时,会创建一个新的项目符号,添加到表单控件和列表 all_bullets 中。

当buttle从if (_bullet.Location.Y <= 0)格式开始时,应从all_bullets列表中删除此代码(下方)中的_bullet。

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);

错误:

  

收藏被修改;枚举操作可能无法执行。

很抱歉,如果重新发布,但我找不到我需要的内容。

1 个答案:

答案 0 :(得分:2)

您在枚举时无法修改集合

all_bullets.Remove(_bullet);  

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

你可以使用黑客来做到这一点

foreach (PictureBox _bullet in all_bullets.ToList())