.NET Framework Méthode d'extension pour IEnumerable


Exemple

ForEach() est défini sur la classe List<T> , mais pas sur IQueryable<T> ou IEnumerable<T> . Vous avez deux choix dans ces cas:

ToList en premier

L'énumération (ou la requête) sera évaluée, en copiant les résultats dans une nouvelle liste ou en appelant la base de données. La méthode est ensuite appelée sur chaque élément.

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

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

Cette méthode a une surcharge de mémoire évidente, car une liste intermédiaire est créée.

Méthode d'extension

Écrivez une méthode d'extension:

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

Utilisation:

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

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

Attention: Les méthodes LINQ du Framework ont ​​été conçues avec l'intention d'être pures , ce qui signifie qu'elles ne produisent pas d'effets secondaires. Le seul but de la méthode ForEach est de produire des effets secondaires et de s’écarter des autres méthodes de cet aspect. Vous pouvez envisager d'utiliser simplement une boucle foreach à la place.