从列表中删除所有项目

时间:2012-04-02 16:36:33

标签: c# list

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

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

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

任何人都知道为什么?

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

m_sessions = new List<Session>();

3 个答案:

答案 0 :(得分:38)

在使用List<T>进行迭代时,不允许修改foreach。请改用m_sessions.Clear()

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

答案 1 :(得分:10)

永远不要修改使用foreach进行迭代的集合。插入,删除和重新排序都是禁止的。但是,您可以修改foreach变量(在这种情况下为session)。

在这种情况下,请使用

m_sessions.Clear();

并消除循环。

答案 2 :(得分:0)

尝试一下:

m_sessions.RemoveRange ( 0 , m_sessions.Count() );