我在迭代Collection时尝试删除对象.但我得到例外.我怎样才能做到这一点?这是我的代码:
foreach (var gem in gems)
{
gem.Value.Update(gameTime);
if (gem.Value.BoundingCircle.Intersects(Player.BoundingRectangle))
{
gems.Remove(gem.Key); // I can't do this here, then How can I do?
OnGemCollected(gem.Value, Player);
}
}
Run Code Online (Sandbox Code Playgroud)
gra*_*noz 23
foreach设计用于迭代集合而不修改它.
要在迭代时从集合中删除项目,请使用从结尾到开头的for循环.
for(int i = gems.Count - 1; i >=0 ; i--)
{
gems[i].Value.Update(gameTime);
if (gems[i].Value.BoundingCircle.Intersects(Player.BoundingRectangle))
{
Gem gem = gems[i];
gems.RemoveAt(i); // Assuming it's a List<Gem>
OnGemCollected(gem.Value, Player);
}
}
Run Code Online (Sandbox Code Playgroud)
dictionary<string, Gem>例如,如果是,你可以像这样迭代:
foreach(string s in gems.Keys.ToList())
{
if(gems[s].BoundingCircle.Intersects(Player.BoundingRectangle))
{
gems.Remove(s);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15755 次 |
| 最近记录: |