集合已修改 可能無法執行列舉操作。

2022-03-28 13:37:58 字數 720 閱讀 3234

foreach是取唯讀的,在取的時候資料不能變(包括修改,刪除,新增等)。要避免這個問題,就應該使用for迴圈。

之前沒有考慮過對collection型別物件操作時for 和foreach的區別,總感覺foreach更方便一些。今天寫了個forearch迴圈來操作刪除某個 collection的元素,出現異常:查詢集合已修改;可能無法執行列舉操作查了一下,這個是使用foreach的典型的問題。foreach是取唯讀的,在取的時候資料不能變(包括修改,刪除,新增等)。要避免這個問題,就應該使用for迴圈……

在foreach遍歷dictionary或者hash時,如果刪除元素就會報這個錯。試過遍歷keys,但刪除元素後還是報一樣的錯。

解決辦法:用乙個list把要刪除的keys記錄了,遍歷完後,把keys中的元素全刪了

這種情況是由於system.collection.generic泛型中集合list<>中執行了remove()方法,則原有集合將被修改,而foreach的實現依賴於ienumerable介面或實現getenumerator方法,這樣均需要使用list<>例項的length屬性。由於原有集合的長度為不確定因素,此時則將出現無法實現進行列舉操作的邏輯錯誤。

解決方法是使用for迴圈進行遍歷刪除,並將游標變數在刪除元素的同時自減1.

for 

(int

i = 0; i < xylist.count; i++)

}

集合已修改 可能無法執行列舉操作。

上次寫的socketmanager中的socketserver最近出現個問題。偶爾會報 集合已修改 可能無法執行列舉操作。錯誤。首先想到的是沒有鎖定集合物件。所以先嘗試 lock alsock lock關鍵字用法,多執行緒共用物件時,操作物件時鎖定物件,這樣如果有別的執行緒訪問物件,則自動加入佇列等...

集合已修改 列舉操作可能無法執行。

system.invalidoperationexception collection was modified enumeration operation might not execute.使用foreach或for迴圈刪除datarow的時候出的問題。用dt.rows.removeat 或dt...

集合已修改 可能無法執行列舉操作。

問題描述 在用foreach遍歷hashtable的時候,彈出 集合已修改 可能無法執行列舉操作。問題 private void check int timeout 這是乙個存活檢查執行緒,為了把連線失效的主機剔除 解決方法 利用for進行遍歷。arraylist akeys new arrayli...