This is wrong (OP approach), as Steve correctly suggested (Steve way is probably the best in terms of performance),
I prefer to store 'those to be removed'
in a separate list, then you can do this, for example.
AllItems = AllItems.Except(Items2Remove);
This is not best suited for performance, but for me it makes things cleaner - you can also combine with LINQ enumeration - for example. make IEnumerable from a list of records, etc.
hope this helps EDIT: just to clarify according to Steve's answer
source share