为什么我不能使用foreach循环从列表框中删除项目:
protected void btnRemove_Click(object sender, EventArgs e) { ListBox listbox = Controltest2.FindControl("ListBox1") as ListBox; if (Controltest2.Items.Count > 0) { foreach (ListItem li in listbox.Items) { if (li.Selected) { Controltest2.Remove(li.Value); } } } }
此代码使我从列表框中删除项目时出错.另一方面;
ListBox listbox = Controltest2.FindControl("ListBox1") as ListBox; if (Controltest2.Items.Count > 0) { int count = Controltest2.Items.Count; for (int i = count - 1; i > -1; i--) { if (listbox.Items[i].Selected) { Controltest2.Remove(listbox.Items[i].Value); } } }
foreach语句为数组或对象集合中的每个元素重复一组嵌入式语句.foreach语句用于迭代集合以获取所需信息,但不应用于更改集合的内容以避免不可预测的副作用
资料来源:MSDN foreach
注意:强调我的
当你使用foreach循环时,你正在修改底层集合,从而可以说出中断枚举器.如果要使用foreach循环,请尝试以下操作:
foreach (ListItem li in listbox.Items.ToArray()) { if (li.Selected) { Controltest2.Remove(li.Value); } }
注意:ToArray()
此示例中的调用假定LINQ为对象,并且根据情况,您可能还需要在调用Cast
之前调用它.我试图在这里得到的主要观点是,通过创建一个数组,foreach现在迭代数组的枚举器而不是ListBox的枚举器,允许您随意修改ListBox的集合.