这是我正在尝试做的事情:

        private readonly IDictionary<float, ICollection<IGameObjectController>> layers;

        foreach (ICollection<IGameObjectController> layerSet in layers.Values)
        {
            foreach (IGameObjectController controller in layerSet)
            {
                if (controller.Model.DefinedInVariant)
                {
                    layerSet.Remove(controller);
                }
            }
        }


当然,这是行不通的,因为它将导致并发修改异常。 (在某些迭代器上是否有等效于Java的安全删除操作?)如何正确执行此操作或使用LINQ?

最佳答案

使用ToList创建一个独立的列表,在该列表上枚举要删除的项目。

    foreach (ICollection<IGameObjectController> layerSet in layers.Values)
    {
        foreach (IGameObjectController controller in layerSet
                   .Where(c => c.Model.DefinedInVariant).ToList())
        {
            layerSet.Remove(controller);

        }
    }

09-04 10:51