Olá.
Dado o seguinte programa em C# o que você espera que o mesmo imprima? (tente responder a pergunta sem compilar/executar o mesmo):
using System; using System.Collections.Generic; using System.Linq; class Program { private static void Main(string[] args) { foreach (var func in GetFuncs1()) { Console.WriteLine("[first] {0}", func()); } foreach (var func in GetFuncs2()) { Console.WriteLine("[second] {0}", func()); } } private static List<Func<int>> GetFuncs1() { var fs = new List<Func<int>>(); for (int i = 0; i < 3; i++) { fs.Add(() => i); } return fs; } private static List<Func<int>> GetFuncs2() { var fs = new List<Func<int>>(); foreach (var i in Enumerable.Range(0, 3)) { fs.Add(() => i); } return fs; } }
Se você rodar o mesmo, o resultado obtido é compatível com sua expectativa? Não? Você entende o porque?
No próximo post vou discutir o comportamento deste programa e também como evitar algumas "armadilhas" relacionadas a Closures em C#.
(read this post in english)
No comments:
Post a Comment