Удалить все элементы из списка

Я хочу удалить все элементы из списка:

foreach (Session session in m_sessions)
{
    m_sessions.Remove(session);
}

В последнем элементе я получаю исключение: UnknownOperation.

Кто-нибудь знает, почему?

как я могу удалить все элементы? Хорошо писать что-то вроде этого:

m_sessions = new List<Session>();

Ответы

Ответ 1

Вам не разрешено изменять List<T>, итерации по нему с помощью foreach. Вместо этого используйте m_sessions.Clear().

Пока вы можете написать m_sessions = new List<Session>(), это не очень хорошая идея. Для начала бесполезно создавать новый список, чтобы очистить уже существующий. Что еще, если у вас есть другие ссылки на список, они будут продолжать ссылаться на старый список. Хотя, как указывает @dasblinkenlight, m_sessions, вероятно, является частным членом, и вряд ли у вас есть другие ссылки на список. Независимо от того, Clear() является каноническим способом очистки a List<T>.

Ответ 2

Никогда, никогда, не изменяйте коллекцию, которая выполняется с помощью foreach. Вставка, удаление и переупорядочение - no-nos. Однако вы можете изменить переменную foreach (session в этом случае).

В этом случае используйте

m_sessions.Clear();

и устранить цикл.