闭包一个容易忽视的小问题及解决方法
2014-02-06 16:50
375 查看
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了。
相关文章推荐
- 一个关于指针的问题,问题很简单,但容易出错,希望大家提出好的解决方法~~~
- 还是一个动态生成列的问题,比较彻底的解决方法(MVP思归)
- DataGuard - 一个关于Physical Standby中recover问题的解决方法
- ssh免密登录的一个问题解决方法
- Rails开始遇到的一个端口占用问题的解决方法
- 一个容易忽视的存储过程问题
- java中一个容易忽视的问题
- 在数据库"WSEDSQLDB"中检测到一个可能的数据库一致性问题。|解决方法
- “无法更新EntitySet“*****”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法
- Win7系统经常弹出“Windows检测到一个硬盘问题”提示窗口的故障原因及解决方法
- 一个新手学习python的过程中遇到的一些问题及解决方法
- 升级vs2010我碰到的一个问题,以及解决方法
- 【转】VS2005 无法创建或打开“智能设备”项目的一个问题的解决方法
- Requirejs加载超时问题的一个解决方法:设置waitSeconds=0
- 用abort函数主动让进程abort/coredump, 有什么用处?------曾用此方法解决过一个低概率开机卡死的问题
- 在tp3.2.3中使用 FormData 对象实现表单的文件上传功能遇到的一个问题及解决方法
- 关于USART很多人都容易忽视的一个问题
- 遍历删除容易出现的ConcurrentModificationException问题解决方法
- DataGuard - 一个关于Physical Standby中recover问题的解决方法