В самом языке C # есть оператор foreach
.
Поскольку Джон намекает (а Эрик прямо заявляет ), разработчики LINQ хотели оставить методы без побочных эффектов, тогда как ForEach
нарушит этот контракт.
На самом деле - это метод ForEach
, который применяет данный предикат в классах List<T>
и Array
, но он был введен в .NET Framework 2.0, а LINQ поставляется только с 3.5. Они не связаны.
В конце концов, вы всегда можете придумать свой собственный метод расширения :
public static void ForEach<T> (this IEnumerable<T> enumeration, Action<T> action)
{
foreach (T item in enumeration)
action (item);
}
Я согласен, что это полезно, если у вас уже есть метод с одним параметром, и вы хотите запустить его для каждого элемента.
var list = new List<int> {1, 2, 3, 4, 5};
list.Where (n => n > 3)
.ForEach (Console.WriteLine);
Однако в других случаях я считаю, что хороший текст foreach
намного чище и лаконичнее.
Кстати, однопараметрический метод void - это не Func<T>
, а Action<T>
.
Func<T>
обозначает функцию, которая возвращает T
, а Action<T>
обозначает метод void
, который принимает T
.