Foreach中的c#动作

本文关键字:动作 中的 Foreach | 更新日期: 2023-09-27 18:06:46

fMethodAction<Fruit>

但调用fMethod时,该参数始终为_Fruits的最后一项。
如何解决这个问题?

foreach(Fruit f in _Fruits)
{
   field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}

Foreach中的c#动作

在创建委托的调用中使用modified子句是一个众所周知的问题。添加一个临时变量应该可以解决这个问题:

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

这个问题在c# 5中修复了(参见Eric Lippert的博客)。

尝试使用临时变量

foreach(Fruit f in _Fruits)
{
   var temp = f;
   field.Add(new Element(temp.ToString(),delegate{fMethod(temp);}));
}