foreach & Dictionary
От: senglory  
Дата: 11.06.09 00:17
Оценка:
                Dictionary<int, double> CustomMY1_ModelIDWeightLookup;

                foreach (int iModel in CustomMY1_ModelIDWeightLookup.Keys)
                {
                    double valMY1 = CustomMY1_ModelIDWeightLookup[iModel] * 100;
                    .....

                    CustomMY1_ModelIDWeightLookup[iModel] = valMY1 / 100;
                }


такое обращение приводит к исключению "Collection was modified; enumeration operation may not execute" ?на втором заходе в foreach.

Почему? Что я делаю не так?
Re: foreach & Dictionary
От: Sinix  
Дата: 11.06.09 00:49
Оценка:
Здравствуйте, senglory

S>такое обращение приводит к исключению "Collection was modified; enumeration operation may not execute" ?на втором заходе в foreach.


S>Почему? Что я делаю не так?


Вы изменяете словарик во время его перебора, о чём вам собственно и написано.
Re[2]: foreach & Dictionary
От: senglory  
Дата: 11.06.09 01:04
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, senglory


S>>такое обращение приводит к исключению "Collection was modified; enumeration operation may not execute" ?на втором заходе в foreach.


S>>Почему? Что я делаю не так?


S>Вы изменяете словарик во время его перебора, о чём вам собственно и написано.


Как я его могу изменять, если я не меняю iModel?
Re[3]: foreach & Dictionary
От: Sinix  
Дата: 11.06.09 01:07
Оценка:
Здравствуйте, senglory

S>Как я его могу изменять, если я не меняю iModel?


 CustomMY1_ModelIDWeightLookup[iModel] = valMY1 / 100


Копируйте ключи в отдельный массив и перебирайте по ним.
Re[4]: foreach & Dictionary
От: senglory  
Дата: 11.06.09 01:13
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, senglory


S>>Как я его могу изменять, если я не меняю iModel?


S>
S> CustomMY1_ModelIDWeightLookup[iModel] = valMY1 / 100
S>


S>Копируйте ключи в отдельный массив и перебирайте по ним.


Это-то понятно. Но я ведь набор ключей не меняю, ни добавляю ни выкидываю. Как я могу тогда зааффектить их коллекцию?
Re[5]: foreach & Dictionary
От: Sinix  
Дата: 11.06.09 01:28
Оценка:
Здравствуйте, senglory

S>Это-то понятно. Но я ведь набор ключей не меняю, ни добавляю ни выкидываю. Как я могу тогда зааффектить их коллекцию?


Самый простой ответ — сделали "чтоп было одинаково" — раз не можешь трогать дерево ключей — не трожь и значения.

Как вариант, изменение значений вызывает перестроение дерева (ну а вдруг? ).

Им проще. Нам тоже — не даёт создать себе потенциальные грабли.
Re: foreach & Dictionary
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.06.09 05:13
Оценка: 3 (1)
Здравствуйте, senglory, Вы писали:

S>такое обращение приводит к исключению "Collection was modified; enumeration operation may not execute" ?на втором заходе в foreach.

S>Почему? Что я делаю не так?

Можно так:
foreach (int iModel in new List<...>(CustomMY1_ModelIDWeightLookup.Keys)) // Вместо ... вставить нужный тип
Re[2]: foreach & Dictionary
От: MatFiz Россия  
Дата: 23.06.09 15:52
Оценка: +1
Здравствуйте, senglory, Вы писали:

Сохрани список ключей до начала перебора.

N>
N>foreach (int iModel in CustomMY1_ModelIDWeightLookup.Keys.ToList())
N>
How are YOU doin'?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.