文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用C# delegate的一种误区场景

使用C# delegate的一种误区场景

时间:2010-09-10  来源:大料

一个小弟特别喜欢使用delegate写代码。有一天他写了如下一段代码:

 

 1                 Action[] action = new Action[6];
2 for (int i = 0; i < action.Count(); i++)
3 {
4 action[i] = () => Console.WriteLine(i);
5 }
6 foreach (Action a in action)
7 {
8 a();
9 }
10

 

 

 这段代码目的是想打印0到5,但是实际结果是

 

通过反汇编调试,可以简单地说:delegate存的仅仅是变量 i 的地址,所有的delegate当调用的时候都是到同一地址取值,于是经过6次循环, i已经变成6,所以打印出来全是6。

对于普通程序员来说,我觉得这是挺容易出错的,得不到期望值,而且不容易发现。

一个简单解决方法:

 

 1                 Action[] action = new Action[6];
2 for (int i = 0; i < action.Count(); i++)
3 {
4 int j = i;
5 action[i] = () => Console.WriteLine(j);
6 }
7 foreach (Action a in action)
8 {
9 a();
10 }
11

 

 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载