使用lambda为通用列表中的每个对象执行方法

时间:2011-10-14 15:26:50

标签: c# linq lambda

我还是lambdas的新手,发现很难找到它的特定功能,但是可以为通用列表中的每个对象执行一个方法吗?与ConvertAll的工作方式类似,但不是转换,而是实际调用方法。

public class Mouse()
{
    public void Squeak()
    {
    }
}

List<Mouse> mice = new List<Mouse>();

mice.Add(new Mouse());
mice.Add(new Mouse());

如何为每只鼠标调用方法吱吱声?

mice.???(m => m.Squeak());

2 个答案:

答案 0 :(得分:5)

您可以使用List<T>.ForEach()方法(see MSDN)执行此操作:

mice.ForEach(m => m.Squeak()); 

PS:问题的答案有多么有趣:

  

如何为每个鼠标调用方法Squeak

答案 1 :(得分:3)

请不要使用List<T>.ForEach。它看起来像一个序列运算符。序列操作符不应有副作用。您正在使用看起来像序列运算符的东西,仅用于其副作用。相反,只需使用一个普通的无聊循环:

foreach(var mouse in mice) {
    mouse.Squeak();
}

Eric Lippert撰写了一篇与此主题相关的精彩文章:foreach vs. ForEach