Action[] tmp = new Action[3]; for (int i = 0; i < tmp.Length; i++) { tmp[i] = () => Console.WriteLine(i); } Array.ForEach(tmp, m => m()); Console.Read();
猜猜打印结果会是啥,012 ?
结果吓一跳
自己仔细想想差不多明白了,闭包是嵌套的,外面一级变量i在作用域里,所以他会返回i最后的值。
修改了下
Action[] tmp = new Action[3]; for (int i = 0; i < tmp.Length; i++) { int j = i; tmp[i] = () => Console.WriteLine(j); } Array.ForEach(tmp, m => m()); Console.Read();
ok了,正确输出012了。