我想迭代一個項目集合,執行一個操作,然後刪除當前索引處的項目。迭代集合並修改它的最佳實踐?
的方式我有這個目前實行的是像這樣:
foreach (CormantRadPane pane in GetPanes().ToList())
{
pane.Clear();
StateManager.Remove(pane);
LayoutManager.Instance.RegisteredPanes.Remove(pane);
Items.Remove(pane);
}
通過調用ToList我創建集合的副本,但保持第一集合中的每個對象的引用。這使我可以迭代GetPanes的收集返回,而不用'技術上'修改集合。
這顯然很容易發現一些嚴重難以追查的錯誤。以乾淨的方式執行此類邏輯的標準方式是什麼,但是對於正在發生的事情的複雜性也更加清楚。
我做了一些環顧四周,看到使用for循環和向後遍歷列表的東西,但看起來很龐大。我的感覺與保留第二個「刪除」項目列表相同,然後在第一個循環完成後遍歷該列表,刪除第二個列表中找到的每個對象。
你如何處理它?謝謝。
可能的重複[如何修改或刪除可枚舉集合中的項目,而在C#中迭代它](http://stackoverflow.com/questions/308466/how-to-modify-or-delete-items-from -an-enumerable-collection-while-iterating-thro) –
@Tuzo我看到這篇文章,並提到我的想法提供的解決方案。被接受的解決方案的第一個評論說,解決方案是有缺陷的,然後它是固定的,然後人們有更好的方法來做其他幾個想法。國際海事組織仍然需要進行一些討論。 –