如何从 ItemsCollection 中删除 Tags 是某些内容的项目

本文关键字:项目 Tags ItemsCollection 删除 | 更新日期: 2023-09-27 18:35:24

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

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

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

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

如何从 ItemsCollection 中删除 Tags 是某些内容的项目

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

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

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

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