fMethod
是Action<Fruit>
。
但是,当调用fMethod
时,该参数始终是_Fruits
的最后一个条目。
怎么解决呢?
foreach(Fruit f in _Fruits)
{
field.Add(new Element(f.ToString(),delegate{fMethod(f);}));
}
最佳答案
这是在创建委托(delegate)的调用中使用修改后的子句的众所周知的问题。添加一个临时变量应该可以解决它:
foreach(Fruit f in _Fruits)
{
Fruit tmp = f;
field.Add(new Element(f.ToString(),delegate{fMethod(tmp);}));
}
此问题已在C#5(see Eric Lippert's blog)中修复。
关于Foreach中的C# Action ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15729193/