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

2022-06-21 09:54:10 字數 788 閱讀 6197

今天編寫程式時 修改了list集合 在foreach時報 「集合已修改;可能無法執行列舉操作。」錯誤。

首先想到的是沒有鎖定集合物件。

增加了 private readonly object syncroot = new object();

所以先嘗試 lock(syncroot){}

lock關鍵字用法,多執行緒共用物件時,操作物件時鎖定物件,這樣如果有別的執行緒訪問物件,則自動加入佇列等待。確保物件操作過程中準確性。

但是問題依舊,查了一下說foreach是唯讀的,集合如果變更就會出這個問題

於是把foreach改為 for(int i =0) 後,問題解決

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

在這裡記錄下 有類似問題希望對你有所幫助

首先想到的是沒有鎖定集合物件。

增加了 private readonly object syncroot = new object();

所以先嘗試 lock(syncroot){}

lock關鍵字用法,多執行緒共用物件時,操作物件時鎖定物件,這樣如果有別的執行緒訪問物件,則自動加入佇列等待。確保物件操作過程中準確性。

但是問題依舊,查了一下說foreach是唯讀的,集合如果變更就會出這個問題

於是把foreach改為 for(int i =0) 後,問題解決

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

在這裡記錄下 有類似問題希望對你有所幫助

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

今天我用foreach語句去迭代dictionary的時候,發現報錯 網上搜了一下,發現foreach在迭代的時候,foreach在迭代過程,不可以增加和刪除.但是,我試驗了,發現還有乙個問題 在進行值比較並修正的時候,也會報錯,如 1 foreach keyvaluepair soilstrkv ...

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

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

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

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