Delete all items from a list
Never, ever, modify a collection that is being iterated on with foreach
. Inserting, deleting, and reordering are no-nos. You may, however, modify the foreach
variable (session
in this case).
In this case, use
m_sessions.Clear();
and eliminate the loop.
You aren't allowed to modify a List<T>
whilst iterating over it with foreach
. Use m_sessions.Clear()
instead.
Whilst you could write m_sessions = new List<Session>()
this is not a good idea. For a start it is wasteful to create a new list just to clear out an existing one. What's more, if you have other references to the list then they will continue to refer to the old list. Although, as @dasblinkenlight points out, m_sessions
is probably a private member and it's unlikely you have other references to the list. No matter, Clear()
is the canonical way to clear a List<T>
.