Проблема в том, что вы не можете удалять элементы из коллекции, пока вы выполняете ее.Вместо этого вы можете выбрать элементы, которые выбраны :) и зациклить их.
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);
}
Кроме того, вы можете использовать цикл for
, как предлагает @Steve:
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);
}
}