Foreach循环没有完成,因为正在对收集进行修改
本文关键字:修改 因为 循环 Foreach | 更新日期: 2023-09-27 18:15:35
我有一个包含视图模型对象的可观察对象集合。我正试着仔细检查这些东西,把任何有植物的地方移走。有生命的财产是"不"。我正在使用这个代码:
foreach (PlantViewModel plant in Plants)
{
if (plant.Living == "No")
{
Plants.Remove(plant);
}
}
PlantsViewSource.Source = Plants;
PlantsGridView.SelectedItem = null;
但是,当遇到第一个满足条件的对象并删除该对象时,它会修改集合,并且foreach抛出错误。如何以另一种方式从集合中删除对象?
错误告诉您,无法从枚举的集合中删除项。一个答案是保留一个你想要删除的项目的列表。
List<PlantViewModel> plantsToRemove = new List<PlantViewModel>();
foreach (PlantViewModel plant in Plants)
{
if (plant.Living == "No")
{
plantsToRemove.Add(plant);
}
}
foreach(var plant in plantsToRemove)
Plants.Remove(plant);
PlantsViewSource.Source = Plants;
PlantsGridView.SelectedItem = null;
一个更可读的选项是;
List<PlantViewModel> plantsToRemove = Plants.Where(p => p.Living == "No");
foreach(var plant in plantsToRemove)
Plants.Remove(plant);
PlantsViewSource.Source = Plants;
PlantsGridView.SelectedItem = null;