首页 新闻 会员 周边

一小段代码

0
悬赏园豆:20 [已解决问题] 解决于 2008-04-18 14:20
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>
JustDI的主页 JustDI | 初学一级 | 园豆:60
提问于:2008-04-17 09:28
< >
分享
最佳答案
0
因为你的集合在遍历过程中发生了变化了。 一个集合在遍历时是不允许同步发生列表改变的。
阿不 | 小虾三级 |园豆:665 | 2008-04-17 10:02
其他回答(2)
0
foreach(int i=0; i&lt;listView1.Items.Count; i++) { ListViewItem m_item = listView1.Items[i]; if(m_item.Selected||m_item.Checked) { listView1.Items.RemoveAt(i); i--; } }
deerchao | 园豆:8367 (大侠五级) | 2008-04-17 10:19
0
《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 中是只读的。 如果要进一步探究,请先了解迭代模式。
杨连国 | 园豆:295 (菜鸟二级) | 2008-04-17 14:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册