Коллекция была изменена;операция перечисления может не выполняться - PullRequest
0 голосов
/ 05 мая 2011

Я перечисляю в Словаре и создаю элемент, который будет добавлен в ListView. Тем не менее, одна строка, в частности, вызывает эту ошибку:

Коллекция была изменена; операция перечисления может не выполняться.

foreach (KeyValuePair<string, bool> s in test.Value.Properties)
{
    ListViewItem item = new ListViewItem();
    item.Text = String.Format("{0}", s.Key);
    if (s.Value) { item.Checked = true; } // the problem line
    listView2.Items.Add(item);
}

Я предполагаю, что причина установки item.Text в том, что я не изменяю исходное значение, так как он создает новую строку. Если я изменяю item.Checked = true для создания нового логического значения, оно работает нормально, но логическое значение всегда устанавливается по умолчанию в false, что не является тем, что я хочу.

Как я могу обойти эту проблему?

Кроме того, я не должен пытаться изменить данные коллекции в foreach? Первоначально я думал, что проблема была в том, что я изменял данные коллекции, через которые я зацикливался, но, похоже, это проблема с ListViewItemCollection, которую я не прохожу.

1 Ответ

7 голосов
/ 05 мая 2011

Эта ошибка возникает, только если вы изменяете коллекцию, через которую вы перечисляете.
Я не вижу ничего подобного в вашем коде, поэтому должна быть какая-то другая проблема.
Я могу только догадываться, но, возможно, вы модифицируете test.Value.Properties в событии, которое возникает при добавлении нового элемента в listView2?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...