fMethodAction<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/

10-10 02:24