Eric fait un argument convaincant à l'exception du fait qu'il ya une ForEach pour la Liste < T> mais seulement pour la liste < T>. J'ai eu plusieurs fois l'occasion d'utiliser cette méthode d'extension très utile et j'ai été également frustré par l'absence d'une méthode d'extension générale pour IEnumerable < T>, donc j'ai finalement décidé d'écrire le mien. En faisant cela, j'ai fini par aller plus loin et écrire une fois les méthodes d'extension fluides T> et ForEvery < T> qui permettent de chaayer des actions sur chaque élément et d'exécuter une action juste une fois dans cette chaîne, si pour aucune autre raison, ils semblaient être une bonne idée à ce moment-là.
Voici le code:
public static class EnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action)
{
foreach (var item in collection)
{
action(item);
}
}
public static IEnumerable<T> Once<T>(this IEnumerable<T> collection,
Func<IEnumerable<T>, bool> predicate, Action<IEnumerable<T>> action)
{
if (predicate(collection))
action(collection);
return collection;
}
public static IEnumerable<T> ForEvery<T>(this IEnumerable<T> collection,
Func<T, bool> predicate, Action<T> action)
{
foreach (var item in collection)
{
if (predicate(item))
action(item);
}
return collection;
}
}
Vous pouvez trouver le code d'utilisation exemple sur mon blog Extend IEnumerable with ForEach and Once Methods.
duplication possible de [équivalent LINQ de foreach pour IEnumerable] (http://stackoverflow.com/questions/200574/linq-equivalent-of-foreach-for-ienumerablet) –
nawfal