Foreach中的C#动作

时间:2013-03-31 12:05:43

标签: c# delegates foreach action

fMethodAction<Fruit>

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

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

2 个答案:

答案 0 :(得分:9)

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

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

此问题已在C#5(see Eric Lippert's blog)中修复。

答案 1 :(得分:1)

尝试使用临时变量。

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