为了账号安全,请及时绑定邮箱和手机立即绑定

一小段代码

一小段代码

C#
紫衣仙女 2018-12-16 21:09:21
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>
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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

查看完整回答
反对 回复 2018-12-20
?
守着一只汪

TA贡献1872条经验 获得超3个赞

《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 中是只读的。 如果要进一步探究,请先了解迭代模式。

查看完整回答
反对 回复 2018-12-20
  • 2 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信