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# 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15729193/