Considera este código.¿Cómo difieren los cierres entre foreach y list.ForEach()?
var values = new List<int> {123, 432, 768};
var funcs = new List<Func<int>>();
values.ForEach(v=>funcs.Add(()=>v));
funcs.ForEach(f=>Console.WriteLine(f()));//prints 123,432,768
funcs.Clear();
foreach (var v1 in values)
{
funcs.Add(()=>v1);
}
foreach (var func in funcs)
{
Console.WriteLine(func()); //prints 768,768,768
}
sé que la segunda imprime foreach 768 3 veces a causa de la variable de cierre capturados por el lambda. ¿Por qué no ocurre en el primer caso? ¿Cómo se diferencia la palabra clave foreach
del método Foreach
? ¿Es por culpa se evalúa la expresión cuando lo hago values.ForEach
Gracias. +1 para la escritura. –