Foreach 中的 C# 操作

标签 c# delegates foreach action

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/

相关文章:

javascript - Node JS forEach 内存泄漏问题

c++ - 实现 Boost 范围适配器 reversed_if

c# - 为 WinForm 面板添加垂直滚动条

c# - 如何在不同的安全上下文中启动线程?

c# - 是否可以根据类型实现泛型方法的注册?

c# - c#.net 中委托(delegate)的内存分配机制

php - 这个foreach循环负责神杀猫吗?

c# - 验证 JWT token 后访问 dotnetcore 中间件

c# - Entity Framework 错误,额外的小数位

ios - 如何转发委托(delegate)的所有方法?