C# 从列表中删除所有项目

C# 从列表中删除所有项目,c#,list,C#,List,我想删除列表中的所有元素: foreach (Session session in m_sessions) { m_sessions.Remove(session); } 在最后一个元素中,我得到一个异常:UnknownoOperation 有人知道为什么吗 如何删除所有元素?可以这样写: m_sessions = new List<Session>(); m_sessions=newlist(); 在使用foreach对列表进行迭代时,不允许修改该列表。改用m_sess

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

foreach (Session session in m_sessions)
{
    m_sessions.Remove(session);
}
在最后一个元素中,我得到一个异常:UnknownoOperation

有人知道为什么吗

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

m_sessions = new List<Session>();
m_sessions=newlist();

在使用
foreach
列表进行迭代时,不允许修改该列表。改用
m_sessions.Clear()


虽然您可以编写
m_sessions=new List()
,但这不是一个好主意。首先,创建新列表只是为了清除现有列表是浪费的。更重要的是,如果您对列表有其他引用,那么它们将继续引用旧列表。尽管,@dasblinkenlight指出,
m_sessions
可能是一个私人成员,您不太可能对该列表有其他引用。不管怎样,
Clear()
是清除
列表的标准方法

永远不要修改使用
foreach
迭代的集合。插入、删除和重新排序是不允许的。但是,您可以修改
foreach
变量(
session

在这种情况下,使用

m_sessions.Clear();
并消除循环。

尝试以下方法:

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

m_Sessions.Clear()
?您确定一直到最后一个元素,我认为您在第一次尝试修改用于迭代的列表时会遇到异常奇怪的是,您没有得到并发修改异常。@dasblinkenlight您是对的,我只有一个元素,所以我在第一个和最后一个元素上都得到了它。确切地说,使用列表迭代器,您可以在遍历列表时安全地修改列表。迭代器知道上一个/下一个节点,并为修改而设计。循环宏和while循环都是标准的。+1但是,假设
m
代表成员,并且它也是私有的,对
m_会话
的其他引用将指示更深层次的问题。为什么m_会话=新的;(或者m_sessions=null,这就是我在读的内容)是否真的要清除列表?@长颈鹿船长不,旧列表不会被清除,但是
m_sessions
将引用一个不同的列表,一个新实例。好吧,-“创建一个新列表只是为了清除一个现有列表是浪费的。”。离开,离开。