I know its generally a big No-No to modify a collection that you are iterating through but unfortunately i didn’t design the code that i’m trying to modify. All over the place the following is done:
for each log in Logs
logs.Delete(log.LogId)
Next
Delete pretty much just deletes the log from the database and removes it from the collection. Previously the Logs object was using a Non-Generic collection. I changed it to use a Collection(Of Log) so i can LINQify the object. Now every time i call next/.MoveNext is called after the first delete the following error happens:
InvalidOperationException:
“Collection was modified; enumeration operation may not execute.”
I understand why i’m getting the error but i don’t understand why it never happened with the Non-Generic version. Is there anyway to get around this error? There really is no way i can take the time to change every place where the delete logs like this (codebase is large). Id like to just remove the code in the Delete function where it removes it from the current collection because i’m assuming no code does anything with the collection after its done but you know what happens when you assume.
Your problem in a nutshell:
Two solutions:
Make a copy of the collection and iterate that instead.
Iterate the collection backwards.
(This would be something like
logs.Delete(logs[i].LogId);)Sorry about the C#, but the concepts are pretty clear.