首页 新闻 会员 周边 捐助

循环添加Action的问题

0
悬赏园豆:20 [已关闭问题] 解决于 2013-10-23 13:26

代码:

List<Action> actions = new List<Action>();
List<string> names = new List<string>();
foreach (var name in names)
{
  actions.Add(() =>
  {
    doSomething(name);
  });
}

这样循环添加之后,发现actions里面添加的都是同一个方法,处理的都是同一个name,比如李雷,所有的行为都变为doSomething(“李雷”)

 

求问各位大师这是咋回事捏?循环只能创建同一个委托??

 

 

 

Williame的主页 Williame | 初学一级 | 园豆:32
提问于:2013-10-23 10:10
< >
分享
其他回答(1)
0

楼上正解,这个和延迟执行一个样子。

收获园豆:5
幻天芒 | 园豆:37207 (高人七级) | 2013-10-23 10:58

多谢

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2013-10-23 13:26
0

问题根源在于滞后执行。

问题原因是:

编译器对于 匿名方法引用的变量 创建引用(比如_name)防止它们的生命周期早结束。

_name指向name的位置。

 

在滞后执行时,通过_name找到name位置,并找到当前指向的变量值。

waiter | 园豆:1000 (小虾三级) | 2013-10-23 13:17

谢谢

支持(0) 反对(0) Williame | 园豆:32 (初学一级) | 2013-10-23 13:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册