fMethod
是一个Action<Fruit>
。
但是当fMethod
被调用时,参数始终是_Fruits
.
如何解决这个问题?
foreach(Fruit f in _Fruits)
{
field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}
这是一个众所周知的问题,即在创建委托的调用中使用修改的子句。添加一个临时变量应该可以解决它:
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);}));
}