.NET Framework
Pour chaque
Recherche…
Remarques
Utilisez-le du tout?
Vous pourriez faire valoir que l'intention du framework .NET est que les requêtes n'ont aucun effet secondaire et que la méthode ForEach
provoque par définition un effet secondaire. Vous pourriez trouver votre code plus facile à entretenir et plus facile à tester si vous utilisez plutôt un foreach
simple.
Appeler une méthode sur un objet dans une liste
public class Customer {
public void SendEmail()
{
// Sending email code here
}
}
List<Customer> customers = new List<Customer>();
customers.Add(new Customer());
customers.Add(new Customer());
customers.ForEach(c => c.SendEmail());
Méthode d'extension pour IEnumerable
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.