3

我想删除所有Tag设置为 string 的项目Dynamic

foreach (MenuItem item in Items.Cast<object>().Where(mi => mi is MenuItem && ((MenuItem) mi).Tag == "Dynamic"))
{
    Items.Remove(item);
}

不幸的是,它不允许我在迭代集合时删除项目。

有没有一种简单的方法可以删除所有满足特定条件的项目,在这种情况下Tag设置为字符串Dynamic

4

2 回答 2

4

由于在迭代时无法更改集合,因此您必须存储结果项并在第二步中将其删除。

IList<MenuItem> itemsToRemove = Items.Cast<object>().Where(mi => mi is MenuItem && ((MenuItem) mi).Tag == "Dynamic").ToList();
foreach (MenuItem item in itemsToRemove)
{
    Items.Remove(item);
}
于 2012-05-27T15:40:03.857 回答
3

您可以改用该方法List<T>.RemoveAll(Predicate<T> match),如下所示:

Items.Cast<object>()
    .RemoveAll(mi => mi is MenuItem && ((MenuItem) mi).Tag == "Dynamic");
于 2012-05-27T15:39:49.503 回答