for (int i = 0; i < _items.Count; i++)
{
Client cl = (Client)_items[i];
cl.credit += 100;
}
Есть вот такое вот дело. Если оно так работает то cl.credit не изменяется (+100 не прибавляется), а если добавить
_items[i] = cl;
то все работает. Почему? Вроде ж должно и без _items[i] = сl; работать?
V_>Есть вот такое вот дело. Если оно так работает то cl.credit не изменяется (+100 не прибавляется), а если добавить
V_>V_>_items[i] = cl;
V_>
V_>то все работает. Почему? Вроде ж должно и без _items[i] = сl; работать?
Всё верно потому, что:
По науке: unboxing это получание адреса boxed обьекта, то есть привидение, но
C# не может непосредственно получить адрес, поэтому для него unboxing — это комбинация првидения +
копирования т.е. ты изменяешь стековую копию обьекта (Client)_items[i], и эти два значения никак не коррелируют между собой.
Заюзав _items[i] = сl думаю, уже понятно почему работает
Здравствуйте, Vertigo_, Вы писали:
V_>то все работает. Почему? Вроде ж должно и без _items[i] = сl; работать?
Не объявляй Client как структуру, и все будет работать.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Nimnul, Вы писали:
N>((Client)_items[i]).credit += 100;
N>так должно работать
Так работать не будет ! Измениться лишь временной обьект

! Тут действительно лучше всего юзать класс вместо структуры !
Чотбы избежать лишних операций упаковки распакови и лишних строк кода !
какоето жжение, ну тогда надо юзать указатели работать будет 100%
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение