'Lista<T>.ForEach()' e mutabilidade
-
15-11-2019 - |
Pergunta
Quero traduzir todos os pontos em um List<T>
.Isso funciona:
for (int i = 0; i <PolygonBase.Count; ++i)
{
PolygonBase[i] = PolygonBase[i] + MousePos;
}
Mas usando List<T>.ForEach
não:
PolygonBase.ForEach(v => v += MousePos);
Ideias?
Solução
O código atual é simplesmente re-atribuir a variável local v
para um novo valor, não se refere de volta para o valor original na lista.É o equivalente a escrever:
foreach(int v in PolygonBase)
{
v += MousePos;
}
Escrever de volta para o valor original, use ConvertAll
:
PolygonBase.ConvertAll(v => v += MousePos);
Outras dicas
ForEach não é mutável, ele não altera a estrutura de dados de qualquer forma.Confira essa ameaça.Usando o condicional lambda instruções com um foreach Ação em uma lista
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow