fMethod
是Action<Fruit>
。
但是当调用fMethod
时,参数始终是_Fruits
的最后一个条目
怎么解决这个问题?
foreach(Fruit f in _Fruits)
{
field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}
答案 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);}));
}