2012-05-27 19 views
2

我想刪除有Tag集中的所有項目串Dynamic如何從ItemsCollection中刪除項目標籤是什麼?

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

不幸的是,它不會讓我刪除項目在迭代集合。

是否有一種簡單的方法可以刪除所有符合條件的項目,在這種情況下Tag設置爲字符串Dynamic

回答

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); 
} 
+0

「收集已修改,枚舉操作可能無法執行。」 – Tower

+0

編輯該帖子。使用ToList()生成要刪除的項目的新實例。它現在會工作。 – MatthiasG

3

您可以使用的方法,而不是List<T>.RemoveAll(Predicate<T> match),像這樣:

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

猜測'RemoveAll'是一種外部擴展方法嗎?聽起來很有趣。 – MatthiasG

+0

@MahmoudGamal我該如何使用這種方法?它說它找不到它,即使我添加了'使用System.Collections.Generic'。 – Tower

+0

@rFactor我也想知道。擴展方法RemoveAll僅存在於列表類中,也許您正在使用另一個集合。 – MatthiasG

相關問題