如何从ItemsCollection中删除Tag是什么东西?

时间:2012-05-27 15:35:23

标签: c# wpf linq

我想删除Tag设置为字符串Dynamic的所有项目:

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

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

是否有一种简单的方法可以删除某些条件符合true的所有项目,在这种情况下Tag设置为字符串Dynamic

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:3)

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

Items.Cast<object>()
    .RemoveAll(mi => mi is MenuItem && ((MenuItem) mi).Tag == "Dynamic");