Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

EngirooSan avatar EngirooSan 38 Точки

[Programming Fundamentals] Foreach на речник

Привет,

имам следното парче код :

foreach (var item in dict)
                {
                    dict[item.Key] = item.Key+"."+dict[item.Key];
                }

това гърми, но ако му се сложи едно ToList() след dict се изпълнява...понеже е ienumerable  за това ли гърми,т.е. когато правим foreach на ienumerable няма как да променяме стойности?

Тагове:
1
Programming Fundamentals 22/05/2017 10:47:36
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Да, забранено е да променяш колекция, докато я обхождаш. Добър пример за това е добавянето в колекция, докато я обхождаш. Какво би станало, ако на всяка итерация добавяш по един елемент? Обхождането никога няма да приключи.

Вариант е да записваш в нова колекция (това ToList() ще създаде нов списък, например) и след като приключиш обхождането да запишеш новата колекция в старата.

За обхождане на последователно индиксируеми колекции (масиви, списъци базирани на масиви, ...) можеш да използваш цикъл, който да увеличава индекса последователно. Така ще симулираш вид обхождане, каквото би направил foreach без да използваш вътрешният указател на колекцията. Разбира се, така рискуваш все пак да направиш безкраен цикъл, ако добавяш на всяко завъртане на цикъла. Но топката остава в теб да не правиш глупости.

Можеш да обходиш и речник, като вместо да обхождаш самия речник - да обхождаш колекцията от ключовете му (KeyCollection), която връща свойството Keys. За всеки намерен ключ, ще бъркаш в речника и ще правиш манипулация. Така компилаторът няма да е наясно в самото начало, че се опитваш да обходиш речника т.е. ще успееш да го излъжеш, за да си направиш нужните манипулации. Отново ще кажа - практиката не се окуражава.

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.