3

Tagstring に設定されているすべてのアイテムを削除したい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

反復中にコレクションを変更することはできないため、結果アイテムを保存し、2 番目のステップでそれを削除する必要があります。

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 に答える