Stack Overflow на русском Asked on November 26, 2020
Итак, есть список 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
?
Rectangle
является структурой. Особенность структур в том, что присваивания осуществляется через копирование. foreach
разворачивается в такую структуру:
var e = rect_list.GetEnumerator();
while(e.MoveNext()) {
Rectangle r = e.Current;
...
}
Соотвественно, все, что произойдет с r будет происходить с копией элемента.
Поэтому ответ на вопрос "как сделать то что у меня сделано в цикле for через цикл foreach" - никак.
Answered by Alex Netkachov on November 26, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP