Я очень новичок в F # здесь, я сталкиваюсь с проблемой "Коллекция была изменена" в F #.Я знаю, что эта проблема распространена, когда мы перебираем коллекцию, одновременно изменяя (добавляя / удаляя) ее.И предыдущие потоки в stackoverflow также указывают на это.
Но в моем случае я работаю над 2 различными наборами: у меня есть 2 коллекции:
- originalCollection исходная коллекция, из которой я хочу удалить вещи
- colToRemove коллекция, содержащая объекты, которые я хочу удалить
Ниже приведен код:
Seq.iter ( fun input -> ignore <| originalCollection.Remove(input)) colToRemove
И я получил следующую ошибку времени выполнения: + $ исключение {System.InvalidOperationException: Коллекция была изменена;операция перечисления может не выполняться. в System.ThrowHelper.ThrowInvalidOperationException (ресурс ExceptionResource) в System.Collections.Generic.List 1.Enumerator.MoveNextRare()
at System.Collections.Generic.List
1.Enumerator.MoveNext () в Microsoft.FSharp.Collections.IEnumerator.next@174 [T] (FSharpFunc 2 f, IEnumerator
1 e, FSharpRef 1 started, Unit unitVar0)
at Microsoft.FSharp.Collections.IEnumerator.filter@169.System-Collections-IEnumerator-MoveNext()
at Microsoft.FSharp.Collections.SeqModule.Iterate[T](FSharpFunc
2 action, IEnumerable`1 source)
вот фрагмент кода:
match newCollection with
| Some(newCollection) ->
// compare newCollection to originalCollection.
// If there are things that exist in the originalCollection that are not in the newCollection, we want to remove them
let colToRemove = Seq.filter (fun input -> Seq.exists (fun i -> i.id = input.id) newCollection) originalCollection
Seq.iter ( fun input -> ignore <| originalCollection.Remove(input)) colToRemove
| None -> ()
Спасибо!
Примечание: здесь работает однопоточная среда, поэтому нет проблем с многопоточностью, которые могут привести к этому исключению.