Foreach中的c#动作
本文关键字:动作 中的 Foreach | 更新日期: 2023-09-27 18:06:46
fMethod
为Action<Fruit>
。
但调用fMethod
时,该参数始终为_Fruits
的最后一项。
如何解决这个问题?
foreach(Fruit f in _Fruits)
{
field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}
在创建委托的调用中使用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);}));
}