Estaba tratando de entender la respuesta a esta pregunta Why am I getting wrong results when calling Func<int>? Escribí un código de muestra. El siguiente código¿por qué este programa C# produce tal resultado? ¿Cómo entiendo el cierre?
public static void Main(string[] args)
{
var funcs = new List<Func<string>>();
for(int v=0,i=0;v<3;v++,i++)
{
funcs.Add(new Func<string>(delegate(){return "Hello "+ i++ +" "+v;}));
}
foreach(var f in funcs)
Console.WriteLine(f());
}
produce
Hello 3 3
Hello 4 3
Hello 5 3
Después de leer la explicación de Jon Skeet y Eric Lippert pensé voy a tener
Hello 3 3
Hello 3 3
Hello 3 3
Aquí, tanto V e I son variables de bucle, mientras el valor de i se recoge en ese instante v no es por qué es esto ?. No entiendo el comportamiento.
¿Se da cuenta de que está incrementando 'i' dos veces? – Blorgbeard
Sí, el incremento es intencional. Solo quería comprobar. Esa fue la causa raíz de esta pregunta. – ferosekhanj