'List <T>.ForEach ()' и изменчивость - PullRequest
       26

'List <T>.ForEach ()' и изменчивость

5 голосов
/ 17 февраля 2011

Я хочу перевести все точки в List<T>.Это работает:

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

Но использование List<T>.ForEach не:

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

Идеи?

Ответы [ 2 ]

11 голосов
/ 17 февраля 2011

Ваш текущий код просто переназначает локальную переменную v на новое значение - оно не ссылается на исходное значение в списке. Это эквивалентно написанию:

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

Чтобы вернуться к исходному значению, используйте ConvertAll:

PolygonBase.ConvertAll(v => v += MousePos);
0 голосов
/ 18 февраля 2011

ForEach не является изменяемым, он никак не меняет структуру данных.Проверьте эту угрозу. Использование условных лямбда-операторов с действием foreach в списке

...