Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2011, 21:05   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
Радость итерация с изменением

Я хочу так же, но что бы можно было вносить изменения в элементы по которым проходит foreach. Как это в С# делается?
Код:
foreach(list in book)
    list.text = "some bla bla bla";
the_deer_one вне форума Ответить с цитированием
Старый 04.05.2011, 14:03   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

В случае с foreach этого нельзя делать. Можно сделать используя for.
Т.е.
Код:
foreach (string str in list)
{
if (some_case)
list.Add(bla); // после этого возникнет exception
}
А так проблем не будет
Код:
for (int i =0; i < list.Count; i++)
{
if (some_case)
list.Add(bla);
}
Hollander вне форума Ответить с цитированием
Старый 04.05.2011, 14:20   #3
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

дык и можно вносить изменения, только не в сами элементы(ссылки на них)...короче
Код:
            List<Book> books = new List<Book>();
           foreach (Book book in books) {
               book.Text = "fff"; //OK

               book = new Book(); //FAIL
               books.Add(new Book());//FAIL
               books = null; //FAIL
           }
т.е код из первого поста работать будет(только добавить тип list еще)

Последний раз редактировалось m0nax; 04.05.2011 в 14:24.
m0nax вне форума Ответить с цитированием
Старый 30.05.2011, 16:48   #4
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Ага, усёк, как раз мне это понадобилось и я вспомнил что создавал такую тему.

Цитата:
дык и можно вносить изменения, только не в сами элементы(ссылки на них).
Всмысле book это ссылочная переменная на элемент контейнера?

А если скажем элементами списка являются объекты intа? Можно изменить их значение? Ведь если присваивать в теле foreach значение итерационной переменной a, то компилятор ругается на то что "a" это такая специальная переменная и так делать низя.

Вообще почему при итерации через свойство изменять состояние объекта можно.
А вот так вот нельзя?
List<int> pocket = new List<int> { 8 };
foreach(int z in pocket) z = 9;
the_deer_one вне форума Ответить с цитированием
Старый 31.05.2011, 02:01   #5
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

z - в данном случае переменная итератора foreach. а менять переменную данного итератора нельзя
Life if about choices
Make the right choice

Последний раз редактировалось TaTT DoGG; 31.05.2011 в 02:06.
TaTT DoGG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Итерация в Паскале recovernick Помощь студентам 1 09.12.2010 18:03
Проблема с изменением hosts _-Re@l-_ Безопасность, Шифрование 6 19.11.2010 21:20
Delphi метод простых итерация world12_tk Помощь студентам 0 29.11.2009 20:16
Помогите с изменением CRC cyber_xz Помощь студентам 3 28.09.2009 17:24