Невозможно перенести выбранные элементы ListBox в другой ListBox - PullRequest
0 голосов
/ 18 марта 2012

Я не могу перенести выбранные элементы из одного 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: Коллекция была изменена;операция перечисления может не выполняться.

1 Ответ

6 голосов
/ 18 марта 2012

Проблема в том, что вы не можете удалять элементы из коллекции, пока вы выполняете ее.Вместо этого вы можете выбрать элементы, которые выбраны :) и зациклить их.

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...