我想删除所有从我的列表中的元素的所有项目:删除列表
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>();
你不允许修改List<T>
同时遍历它foreach
。改为使用m_sessions.Clear()
。您可以写m_sessions = new List<Session>()
这不是一个好主意。首先,创建一个新清单是为了清除现有清单而造成的浪费。更重要的是,如果您有其他参考列表,那么他们将继续参考旧列表。虽然,@ dasblinkenlight指出,m_sessions
可能是一个私人成员,它不太可能有其他的引用。无论如何,Clear()
是清除List<T>
的标准方法。
确切地说,与列表迭代器,你可以安全地修改列表,而遍历它。迭代器知道前一个/下一个节点,并且是为修改而设计的。循环宏和while循环没有标准。 – 2012-04-02 16:40:42
+1但是,假设'm_'代表* member *,并且它也是私有的,那么对'm_sessions'的其他引用将会在更深层次上指出问题。 – dasblinkenlight 2012-04-02 16:42:00
为什么会m_sessions = new ..; (或者m_sessions = null,这正是我正在阅读的内容)实际上清除了列表? – 2012-04-02 16:43:59
永远不会修改正在迭代的集合,其格式为foreach
。插入,删除和重新排序都是非数字。但是,您可以修改变量foreach
(在这种情况下为session
)。
在这种情况下,使用
m_sessions.Clear();
并消除回路。
'm_Sessions.Clear()'? – 2012-04-02 16:37:21
尝试list.Clear()。 – 2012-04-02 16:37:43
你确定你到达最后一个元素,我想你会在第一次尝试修改用于迭代的列表时出现异常 – musefan 2012-04-02 16:39:37