我有兩個字符串集合:CollectionA是存儲在系統中的對象的StringCollection屬性,而CollectionB是運行時生成的List。如果有任何區別,CollectionA需要更新以匹配CollectionB。所以我設計了我期望成爲一個簡單的LINQ方法來執行刪除。當不修改枚舉集合時,爲什麼會出現「集合已被修改;枚舉操作可能無法執行」?
var strDifferences = CollectionA.Where(foo => !CollectionB.Contains(foo));
foreach (var strVar in strDifferences) { CollectionA.Remove(strVar); }
但我得到的strDifferences一個"Collection was modified; enumeration operation may not execute"
錯誤...即使它是從集合被修改單獨枚舉!我最初設計了這個明確來規避這個錯誤,因爲我的第一個實現會產生它(因爲我在CollectionA
之間列舉並且僅僅在!CollectionB.Contains(str)
時才刪除)。任何人都可以瞭解爲什麼這個枚舉失敗了嗎?
'ToArray()'會在這裏變得更好嗎?沒有必要使用'List'。 – svick 2010-05-07 21:22:44
@svick這是我一直想知道的事情,但那會是我在另一天要問的問題。提供它還沒有被問到,當然 - - 點擊 - – 2010-05-07 21:24:46
@GraceNote在這裏捕獲:http://stackoverflow.com/questions/1105990/is-it-better-to-call-tolist-or-toarray-in -linq-queries – nawfal 2013-06-05 14:27:16