从列表中删除所有项目

jan*_*eob 30 c# list

我想删除列表中的所有元素:

foreach (Session session in m_sessions)
{
    m_sessions.Remove(session);
}
Run Code Online (Sandbox Code Playgroud)

在最后一个元素中,我得到一个异常:UnknownOperation.

谁知道为什么?

我该如何删除所有元素?写这样的东西是可以的:

m_sessions = new List<Session>();
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 42

你不能修改一个List<T>while迭代它foreach.请m_sessions.Clear()改用.

虽然你可以写m_sessions = new List<Session>()这个不是一个好主意.首先,创建新列表以清除现有列表是浪费的.更重要的是,如果您对列表有其他引用,那么他们将继续引用旧列表.虽然,正如@dasblinkenlight指出的那样,m_sessions它可能是一个私有成员,你不太可能有其他的列表引用.Clear()无论如何,是清除a的规范方式List<T>.


Ken*_*rey 11

永远不要修改正在迭代的集合foreach.插入,删除和重新排序都是禁止的.但是,您可以修改foreach变量(session在本例中).

在这种情况下,使用

m_sessions.Clear();
Run Code Online (Sandbox Code Playgroud)

并消除循环.