这对于你们其中一个聪明的人来说很简单 - 我有一个包含viewmodel对象的可观察集合。我试图通过这些物品并移除任何植物.Living属性是" No"。我正在使用此代码:
foreach (PlantViewModel plant in Plants)
{
if (plant.Living == "No")
{
Plants.Remove(plant);
}
}
PlantsViewSource.Source = Plants;
PlantsGridView.SelectedItem = null;
但是,当遇到符合条件的第一个对象并且该对象被删除时,它会修改集合并且foreach会抛出错误。如何以其他方式从集合中删除对象?
答案 0 :(得分:2)
如错误告诉您,您无法从正在枚举的集合中删除项目。答案是保留要删除的项目列表。
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;