Выполнить метод для каждого объекта в общем списке с использованием lambda

#c# #linq #lambda

#c# #linq #лямбда

Вопрос:

Я все еще новичок в лямбдах, и мне трудно найти для него конкретные функции, но возможно ли выполнить метод для каждого объекта в общем списке? Аналогично тому, как работает 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());
  

Ответ №1:

Вы можете сделать это с помощью List<T>.ForEach() метода (см. MSDN):

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

PS: Что интересного в том, что ответ содержится в вашем вопросе:

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

Ответ №2:

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

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

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