Foreach中的C#动作

use*_*675 5 c# foreach delegates action

fMethod是一个Action<Fruit>.

但是当fMethod调用时,参数始终是最后一个条目_Fruits.
怎么解决这个?

foreach(Fruit f in _Fruits)
{
   field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 9

这是一个众所周知的问题,即在创建委托的调用中使用修改的子句.添加临时变量应解决它:

foreach(Fruit f in _Fruits)
{
    Fruit tmp = f;
    field.Add(new Element(f.ToString(),delegate{fMethod(tmp);}));
}
Run Code Online (Sandbox Code Playgroud)

此问题已在C#5中修复(请参阅Eric Lippert的博客).

  • 此问题**已在C#5.0中修复:http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx (3认同)