删除列表中的所有项目

问题描述 投票:31回答:3

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

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

在最后一个元素中,我得到一个例外:UnknownOperation。

任何人都知道为什么吗?

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

m_sessions = new List<Session>();
c# list
3个回答
43
投票

在用List<T>遍历foreach的同时,您无法对其进行修改。请改用m_sessions.Clear()

虽然您可以写m_sessions = new List<Session>(),但这不是一个好主意。首先,创建一个新列表只是清除现有列表是浪费的。此外,如果您还有其他对列表的引用,则它们将继续引用旧列表。虽然,正如@dasblinkenlight指出的那样,m_sessions可能是私有成员,并且您不太可能对列表有其他引用。没关系,Clear()是清除List<T>的规范方法。


12
投票

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

在这种情况下,使用

m_sessions.Clear();

并消除循环。


0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.