我无法将所选项目从一个ListBox传输到另一个ListBox:
protected void Button2_Click(object sender, EventArgs e)
{
foreach (ListItem li in ListBox2.Items)
{
if (li.Selected)
{
ListItem liNew = new ListItem(li.Text, li.Value);
ListBox1.Items.Add(liNew);
ListBox2.Items.Remove(liNew);
}
}
}
我得到了例外:
System.InvalidOperationException:修改了集合;枚举操作可能无法执行。
答案 0 :(得分:6)
问题是,在迭代时,您无法从集合中删除元素。相反,您可以选择已选择的项目:)并循环它们。
foreach(ListItem li in ListBox2.Items.Where(x => x.Selected)) {
ListItem liNew = new ListItem(li.Text, li.Value);
ListBox1.Items.Add(liNew);
ListBox2.Items.Remove(li);
}
(另外,我认为你的意思是li
,而不是liNew
。)
如果没有LINQ,它可能看起来像:
List<ListItem> toRemove = new List<ListItem>();
foreach(ListItem li in ListBox2.Items) {
if(li.Selected) {
ListItem liNew = new ListItem(li.Text, li.Value);
ListBox1.Items.Add(liNew);
toRemove.Add(li);
}
}
foreach(ListItem li in toRemove) {
ListBox2.Items.Remove(li);
}
此外,您可以按照@Steve:
的建议使用for
循环
for(int i = ListBox2.Items.Count; --i >= 0;) {
ListItem li = ListBox2.Items[i];
if(li.Selected) {
ListItem liNew = new ListItem(li.Text, li.Value);
ListBox1.Items.Add(liNew);
ListBox2.Items.RemoveAt(i);
}
}