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

2021-05-24 08:56:45 字數 419 閱讀 3650

system.invalidoperationexception: collection was modified; enumeration operation might not execute.

使用foreach或for迴圈刪除datarow的時候出的問題。

用dt.rows.removeat()或dt.rows.remove()或dt.rows[i].delete()時都可能出現這個問題。

問題原因:row[i].delete()的時候(dt.rows.removeat()和dt.rows.remove()其實是先delete再acceptchanges的),行的狀態必須是unchanged,才可以的,新增加的行裡的狀態是added,然後丟擲了剛才說的異常。

解決辦法:迴圈找到datatable中每一行的行狀態,都改為unchanged。

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

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

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

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

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

foreach是取唯讀的,在取的時候資料不能變 包括修改,刪除,新增等 要避免這個問題,就應該使用for迴圈。之前沒有考慮過對collection型別物件操作時for 和foreach的區別,總感覺foreach更方便一些。今天寫了個forearch迴圈來操作刪除某個 collection的元素,出...