我想从我的列表中删除所有元素:
foreach (Session session in m_sessions)
{
m_sessions.Remove(session);
}
在最后一个元素处,我遇到了一个异常:UnknownOperation。
有人知道为什么吗?
我应该如何删除所有元素?像这样写可以吗:
m_sessions = new List<Session>();
我想从我的列表中删除所有元素:
foreach (Session session in m_sessions)
{
m_sessions.Remove(session);
}
在最后一个元素处,我遇到了一个异常:UnknownOperation。
有人知道为什么吗?
我应该如何删除所有元素?像这样写可以吗:
m_sessions = new List<Session>();
在使用 foreach
循环遍历 List<T>
的时候,不允许修改该列表。可以使用 m_sessions.Clear()
来清空列表。
虽然你可以写 m_sessions = new List<Session>()
,但这不是一个好主意。首先,创建一个新列表只是为了清空现有的列表是浪费的。此外,如果您还有对该列表的其他引用,则它们将继续引用旧列表。尽管 @dasblinkenlight 指出,m_sessions
可能是一个私有成员,你可能没有对这个列表的其他引用。无论如何,使用 Clear()
是清空 List<T>
的标准方法。
m_
代表 成员,并且它也是私有的,那么其他对 m_sessions
的引用将表明存在更深层次的问题。 - Sergey Kalinichenkom_sessions
将引用一个不同的列表,即一个新实例。 - David Heffernan切勿在使用foreach
迭代集合时对其进行修改,包括插入、删除和重新排序等操作。但可以修改foreach
变量(本例中为session
)。
在这种情况下,请使用
m_sessions.Clear();
并消除循环。
试试这个:
m_sessions.RemoveRange ( 0 , m_sessions.Count() );