一小段代码

foreach(ListViewItem m_item in listView1.Items)<br>{<br>&nbsp;&nbsp;&nbsp; if(m_item.Selected||m_item.Checked)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listView1.Items[i].RemoveAt(m_item.Index);<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>在winform中,这段代码为什么会出错呢?<br>

紫衣仙女
浏览 660回答 2
2回答

海绵宝宝撒

因为你的集合在遍历过程中发生了变化了。 一个集合在遍历时是不允许同步发生列表改变的。

守着一只汪

《C#语言规范》 8.8.4 foreach 语句 在 foreach 语句执行期间,迭代变量表示当前正在为其执行迭代的集合元素。如果嵌入语句试图修改迭代变量(通过赋值或 ++ 和 -- 运算符)或将迭代变量作为 ref 或 out 参数传递,则将发生编译时错误。 《规范》给出了foreach的背后扩展形式 E enumerator = (collection).GetEnumerator(); try { while (enumerator.MoveNext()) { ElementType element = (ElementType)enumerator.Current; statement; } } finally { IDisposable disposable = enumerator as System.IDisposable; if (disposable != null) disposable.Dispose(); } 并说,enumerator 变量是一个临时变量,它在嵌入 statement 中既是不可访问的,也是不可见的,元素变量在嵌入 statement 中是只读的。 如果要进一步探究,请先了解迭代模式。
打开App,查看更多内容
随时随地看视频慕课网APP