我有这段代码,如果玩家不活着,就会删除玩家,但我认为问题出在 foreach
循环上。我见过涉及制作新列表的解决方案,但我看不出如何将它应用到我的代码中。谁能解释一下?
private Dictionary<int, Player> numPlayers = new Dictionary<int, Player>();
private void CheckPlayers()
{
foreach (Player player in numPlayers.Values)
{
if (!player.isAlive)
{
canvas.Children.Remove(player.hand);
numPlayers.Remove(player.id); // breaks here
}
}
}
最佳答案
查询要删除的玩家集合:
var playersToDelete = numPlayers.Values.Where(p => !p.isAlive).ToList();
然后删除玩家:
foreach(var player in playersToDelete) {
canvas.Children.Remove(player.hand);
numPlayers.Remove(player.id);
}
关于c# - 集合被修改;枚举操作可能无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9726484/