今天編寫程序時 修改了list集合 在foreach時報 “集合已修改;可能無法執行枚舉操作。”錯誤。
首先想到的是沒有鎖定集合對象。
增加了 private readonly object syncRoot = new object();
所以先嘗試 lock(syncRoot){}
lock關鍵字用法,多線程共用對象時,操作對象時鎖定對象,這樣如果有別的線程訪問對象,則自動加入隊列等待。確保對象操作過程中准確性。
但是問題依舊,查了一下說foreach是只讀的,集合如果變更就會出這個問題
於是把foreach改為 for(int i =0) 后,問題解決
foreach是取只讀的,在取的時候數據不能變(包括修改,刪除,添加等)。要避免這個問題,就應該使用for循環。
在這里記錄下 有類似問題希望對你有所幫助