prakash, solo por el bien de la corrección/integridad: no es cierto que no se podrá acceder a las variables una vez que finalice el ciclo. Normalmente asumimos que el objeto que se está creando es muy simple, que podría no ser el caso. Por ejemplo, puede agregar el objeto a una lista global dentro del constructor, de modo que todos los objetos sigan siendo accesibles después de que termine el ciclo.
La diferencia relevante es la señalada por kbrinley, porque no se puede usar la variable (que es una referencia de objeto) fuera del alcance (lo que sea entre {y}) en el primer ejemplo. Como en el segundo declaras la variable fuera del ciclo, aún puedes usar la variable.
Como dijo Marc Gravell, la IL generado es el mismo para ambos, por lo que no debería haber ninguna diferencia en términos de rendimiento, la ocupación de memoria, etc., para el bucle de. [1]
1: Dado que en el segundo ejemplo ciertamente se conserva una referencia a la última variable, el recolector de basura no podrá liberar su espacio. Entonces, después de que termine el ciclo, habrá diferencias sutiles.
+1 porque eso es realmente interesante. –
Como siempre, Marc, entregas más allá de lo esperado. El alcance cuando se hace lambda es una tuerca difícil de romper a veces.Estoy seguro de que todos nos hemos quemado por el problema de alcance que señalas arriba. Sé que tengo. ¡Aclamaciones! – TheSoftwareJedi