Skip to main content
 首页 » 编程设计

c#之集合已更改。未执行可能的盘点操作

2024年02月06日27jpfss

我是一个初级程序设计者,我有一个游戏,如果 Sprite 发生碰撞,它们就会被移除。但是当我播放它并且 Sprite 发生碰撞时,我收到此错误:“集合已更改。未执行可能的库存操作。” (我把这句话从荷兰语翻译成英语)。我真的不知道如何解决这个问题,感谢任何帮助。

private void checkCollisions() 
        { 
            foreach (ISprite s in allSpriteBullets) 
            { 
                Rectangle kogel = new Rectangle((int)s.position.X, (int)s.position.Y, 10, 10); 
 
                foreach (ISprite d in allSpriteObstakels) // error here 
                { 
                Rectangle blokjes = new Rectangle((int)d.position.X, (int)d.position.Y, 25, 25); 
                Rectangle overlap = Rectangle.Intersect(kogel, blokjes); 
                    if (!overlap.IsEmpty)  
                    { 
                        if (s is Bullet) 
                        { 
                            d.CollisionWith(s); 
                            s.CollisionWith(d); 
                            hud.Score += 10; 
                            allSpriteBullets.Remove(s); 
                            allSpriteObstakels.Remove(d); 
                        } 
 
                        if (d is Monsters) 
                        { 
                            s.CollisionWith(d); 
                            d.CollisionWith(s); 
                        } 
 
                    } 
                } 
            } 
 
        } 

请您参考如下方法:

您不能在迭代时修改集合,即在它们自己的 foreach 循环中。

如果您需要修改集合,请使用 for 循环或将要删除的项目保存在一个额外的集合中,并在 foreach 循环完成后删除它们。