【问题标题】:Can we update a list using anonymous methods?我们可以使用匿名方法更新列表吗?
【发布时间】:2011-12-05 19:14:45
【问题描述】:

我有一个对象列表 (MyList)...我想更新该列表中每个项目的一个属性 (Priority)。

下面的代码是否适用?

this.MyList.All(
    delegate(ItemViewModel itemObject)
    {   
        itemObject.Priority = priority++;
    }
)

请帮助我。提前致谢!

【问题讨论】:

  • 扩展方法All() 将根据列表中的每个项目是否满足委托中给定的条件返回真/假。由于委托不返回布尔值,因此不应编译。

标签: c# delegates anonymous-methods


【解决方案1】:

为什么不直接使用foreach

foreach(ItemViewModel itemObject in MyList)
  itemObject.Priority = priority++;

如果你真的想使用委托,你可以使用ForEach()

MyList.ForEach(itemObject =>
{
    itemObject.Priority = priority++;
});

这是不可取的,因为您使用 priority++ 引入了副作用

【讨论】:

    【解决方案2】:

    如果是列表,那么你应该使用:

    MyList.ForEach(i => i.Priority = priority++);
    

    或等价物:

    MyList.ForEach(delegate(ItemViewModel i) { i.Priority = priority++ });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-24
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多