我想删除列表中的所有元素:
foreach (Session session in m_sessions)
{
m_sessions.Remove(session);
}
在最后一个元素中,我得到一个异常:UnknownOperation。
任何人都知道为什么?
我应该如何删除所有元素?写这样的东西是可以的:
m_sessions = new List<Session>();
答案 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() );