天天看點

System.InvalidOperationException:“集合已修改;可能無法執行枚舉操作。”

很久沒遇到這個問題,都忘記是什麼引起的了,記個筆記。

首先foreach周遊是根據清單下标周遊的,foreach周遊前,會根據清單生成對标數組,如清單[1,2,3,4],生成的下标分别是(0,1,2,3),周遊的過程中删除元素,會導緻清單變動,後面的元素前移。

如周遊中要删除清單中的元素“1”,删除元素“1”後,清單依次前移,變為[2,3,4],而下一個下标是1,根據下标通路現在的清單,就通路到了元素“3”,而我們想通路的是元素“2”

解決方法有兩種:

1. 從後面删除,這樣就不會有下标前移的情況

2. 先foreach周遊一遍,生成一個list1,記錄要删除的項

    周遊list1,删除字典/清單中的項