Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'List<T>.ForEach()' and mutability

I want to translate all points in a List<T>. This works:

for (int i = 0; i <PolygonBase.Count; ++i) 
{
    PolygonBase[i] = PolygonBase[i] + MousePos;
}

But using List<T>.ForEach doesn't:

PolygonBase.ForEach(v => v += MousePos);

Ideas?

like image 853
Tili Avatar asked Feb 17 '11 20:02

Tili


1 Answers

Your current code is simply re-assigning the local variable v to a new value - it doesn't refer back to the original value in the list. It's the equivalent of writing:

foreach(int v in PolygonBase)
{
    v += MousePos;
}

To write back to the original value, use ConvertAll:

PolygonBase.ConvertAll(v => v += MousePos);
like image 161
Rex M Avatar answered Sep 24 '22 03:09

Rex M