2012-09-10 25 views
1

我正在處理大量對象集合並對它們進行順序讀取。 我發現大多數問題涉及多線程,但我更關心線程本身內由於濫用可分發庫的錯誤。在按順序讀取時防止集合修改

庫中的一個系統管理一個潛在的大量對象集合,一次執行對這個集合的連續讀取,對每個元素執行一個操作。 根據可以在庫之外擴展的元素實現,對象可能會嘗試從集合中刪除自己。

我希望這是一個選項,但如果發生這種情況時順序讀取集合這可能會導致錯誤。我希望能夠在收集內容的同時鎖定收集的內容,並且在順序閱讀完成之後按計劃執行任何刪除請求。 移除請求必須通過系統,因爲對象沒有對集合的公共訪問權限,我只能使用isReading標誌,但我想知道是否有更優雅的構造。

C#或.NET是否提供了一個工具來執行此操作?也許是爲了鎖定列表內容,以便在順序讀取期間攔截刪除請求?或者我是否必須從頭開始實施這種行爲?

回答

0

您可以使用下招

List<T> collection; 

for(int index = collection; index >= 0; --index) 
{ 
    var item = collection[index]; 

    if(MUST BE DELETED) 
    { 
    collection.RemoveAt(index); // this is faster 
    OR 
    collection.Remove(item); 
    } 
} 

這個代碼將不會在收集修改崩潰,將處理收集

的每個項目
+0

這種方法與我作爲「從頭開始實施」選項計劃的一樣。 RemoveAt更快的說明很有用,但我更關心的是以一種防止誤用的方式建立「必須刪除」條件的優雅方式。 – user1658867

+0

有沒有辦法實現它很好,清晰。第二種解決方案是將所有應刪除的項目存儲在單獨的集合中。並在下一個循環中刪除它們。 –

+0

提供的代碼非常快速且穩定,我使用它已經很多年了。 –