#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
.