最简单的方法是执行@IV4 建议的操作:
foreach (var gem in gems.ToList())
ToList()
会将 Dictionary 转换为 的列表,KeyValuePair
因此可以正常工作。
唯一不希望这样做的情况是,如果您有一个大字典,您只删除相对较少的项目并且您希望减少内存使用。
只有在这种情况下,您才需要使用以下方法之一:
在找到它们时列出键,然后有一个单独的循环来删除这些项目:
List<KeyType> keysToRemove = new List<KeyType>();
foreach (var gem in gems)
{
gem.Value.Update(gameTime);
if (gem.Value.BoundingCircle.Intersects(Player.BoundingRectangle))
{
OnGemCollected(gem.Value, Player);
keysToRemove.Add(gem.Key);
}
}
foreach (var key in keysToRemove)
gems.Remove(key);
(KeyType
您使用的密钥类型在哪里。替换正确的类型!)
或者,如果在调用之前删除 gem 很重要OnGemCollected()
,那么(使用 key typeTKey
和 value type TValue
)这样做:
var itemsToRemove = new List<KeyValuePair<TKey, TValue>>();
foreach (var gem in gems)
{
gem.Value.Update(gameTime);
if (gem.Value.BoundingCircle.Intersects(Player.BoundingRectangle))
itemsToRemove.Add(gem);
}
foreach (var item in itemsToRemove)
{
gems.Remove(item.Key);
OnGemCollected(item.Value, Player);
}