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)
这是一个众所周知的问题,即在创建委托的调用中使用修改的子句.添加临时变量应解决它:
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的博客).