Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Можно ли присваивать внутри foreach?


Автор: Dims 5.11.2008, 00:35
А если я присвою значение переменной цикла foreach внутри цикла, оно занесётся в коллекцию?

Например,

Код

foreach(double d in ds) {
   d = 0;
}

Автор: Bogdan1024 5.11.2008, 00:56
Конечно, не. 
Когда ты гоняешь по коллекции используя foreach, то тебе на самом деле объект, реализующий IEnumerable возвращает IEnumerator, который в свою очередь возвращает сам объект. Тоесть, если ты присвоишь переменной, ссылающейся на объект о1, ссылку на объект о2, то в коллекции ничего не поменяется.
А в этом случае не поменяется тем более так как double - это value-type.
Код

foreach(double d in ds) {
   d = 0;
}

Автор: Dims 5.11.2008, 14:29
Я почему спрашиваю. В Си# энумератор устроен так, что по идее ему может быть можно присваивать. У него же есть Current, а это -- свойство, у которого есть и сеттер и геттер. 


Автор: Bogdan1024 5.11.2008, 14:49
Офигеть. Мне нужно было сначала проверить smile
Код

            foreach (c c0 in cs)
                c0 = new c(654);

Кидает эксцепшн "Cannot assign to 'c0' because it is a 'foreach iteration variable'"

Добавлено через 1 минуту и 27 секунд
То же самое и с 
Код

foreach(double d in ds) {
   d = 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)