Изменение свойств элементов List массива через метод в цикле foreach C#
Итак, есть список List<Rectangle> rect_list = new List<Rectangle>();, нужно в цикле изменить свойство Location для всех объектов, у меня долго не получалось, делал через все возможные циклы foreach:
Так
foreach (var T in rect_list)
{
T.Offset(-50, 0);
}
И так
rect_list.ForEach(delegate (Rectangle offset)
{
offset.Offset(-50, 0);
});
Проблема в том что свойства объектов не меняются вообще, как будто с ними ничего и не делают, проблему я решил так:
for (int i = 0; i < rect_list.Count; i++)
{
rect_list[i] = new Rectangle(rect_list[i].X -50, rect_list[i].Y, 50, 50);
}
Но хотелось бы сделать это через foreach это возможно сделать? или он годится только для вывода информации куда либо?
В общем вопрос такой, как сделать то что у меня сделано в цикле for через цикл foreach?
Ответы (1 шт):
Rectangle является структурой. Особенность структур в том, что присваивания осуществляется через копирование. foreach разворачивается в такую структуру:
var e = rect_list.GetEnumerator();
while(e.MoveNext()) {
Rectangle r = e.Current;
...
}
Соотвественно, все, что произойдет с r будет происходить с копией элемента.
Поэтому ответ на вопрос "как сделать то что у меня сделано в цикле for через цикл foreach" - никак.