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

2021-09-08 21:42:31 字數 507 閱讀 7334

問題描述:在用foreach遍歷hashtable的時候,彈出「集合已修改;可能無法執行列舉操作。」

問題**:       

private void check(int timeout)        //這是乙個存活檢查執行緒,為了把連線失效的主機剔除}}

解決方法:利用for進行遍歷。

arraylist   akeys=new   arraylist(_transmit_tb.keys);   

for(int   p=akeys.count-1;p> -1;p--) 

原因:1、hashtable存放你放入的值的時候   不是按照你存放順序放的 

所以當你用foreach遍歷的時候   就不能保證遍歷出來的順序和你原來存放進去的順序是一致的

2、msdn的解釋:foreach

語句是對列舉數的包裝,它只允許從集合中讀取,不允許寫入集合。

也就是,不能在foreach裡遍歷的時侯把它的元素進行刪除或增加的操作的

部分內容參考:

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

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

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

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

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

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