Выполнить метод для каждого объекта в общем списке, используя лямбду - PullRequest
6 голосов
/ 14 октября 2011

Я все еще новичок в lambdas и мне сложно найти конкретные функции для него, но возможно ли выполнить метод для каждого объекта в общем списке?Похоже на то, как работает ConvertAll, но вместо конвертации, фактически вызывая метод.

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

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

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

Как вы вызываете метод Squeak для каждой мыши?

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

Ответы [ 2 ]

5 голосов
/ 14 октября 2011

Вы можете сделать это, используя метод List<T>.ForEach() ( см. MSDN ):

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

PS: Что за забавный ответ на ваш вопрос:

Как вы называете метод Squeak для каждой мыши?

3 голосов
/ 14 октября 2011

Пожалуйста, не используйте List<T>.ForEach.Это похоже на оператор последовательности.Операторы последовательности не должны иметь побочных эффектов.Вы используете что-то, что выглядит как оператор последовательности исключительно для его побочных эффектов.Вместо этого просто используйте простой старый скучный цикл:

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

У Эрика Липперта есть невероятная статья, связанная с этой темой: foreach против ForEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...