Looking for .net Keywords? Try Ask4Keywords

.NET Framework Метод расширения для IEnumerable


пример

ForEach() определяется в классе List<T> , но не в IQueryable<T> или IEnumerable<T> . В этих случаях у вас есть два варианта:

ToList первый

Нумерация (или запрос) будет оцениваться, копирование результатов в новый список или вызов базы данных. Затем этот метод вызывается для каждого элемента.

IEnumerable<Customer> customers = new List<Customer>();

customers.ToList().ForEach(c => c.SendEmail());

Этот метод имеет очевидные издержки использования памяти, поскольку создается промежуточный список.

Метод расширения

Напишите метод расширения:

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
{
    foreach(T item in enumeration)
    {
        action(item);
    }
}

Использование:

IEnumerable<Customer> customers = new List<Customer>();

customers.ForEach(c => c.SendEmail());

Внимание: методы LINQ Framework разработаны с целью быть чистыми , что означает, что они не производят побочных эффектов. Единственной целью метода ForEach является создание побочных эффектов и отклонение от других методов в этом аспекте. Вместо этого вы можете просто использовать простой цикл foreach .