c# - 集合被修改;枚举操作可能无法执行

标签 c#

我有这段代码,如果玩家不活着,就会删除玩家,但我认为问题出在 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/

相关文章:

c# - 在gridview中隐藏空行

c# - 为什么 String.IndexofAny() 在 Framework 4.6 中与 .NET50 中的工作方式不同

c# - 如何使用 Linq 的聚合函数 C# 添加到列表

c# - 如何从 MS Access 转换到 MySQL?

c# - Windows Phone 8.1 图像异步不更新

c# - 整数在较高值时表现出奇怪的行为

c# - Q : How to serialized parallel connection with FIFO Queue?

c# - 增加一个使用数字和字符的索引(又名 Base36 数字)

c# - 使用C#复制excel中的单元格

c# - 数据迁移 MS SQL - C# 中的 MySQL