这是我正在尝试做的事情:
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);
}
}