One ForEach to rule them all
I ran into this when I was investigating functional programming in C#. That’s been around for a while, but apart from using it for traversing or modifying collections or lists, I never actually created something that was making use of a function parameter.
Anyway, one of my most used constructs is the ForEach<T> method of List<T>. I always thought it to be quite annoying that it is only available for List<T>. Not for IList<T>, ICollection<T>, or whatever. Using my trademark solution pattern – the extension method ;-)
I tried the following:
using System; using System.Collections.Generic; namespace LocalJoost.Utilities { public static class GenericExtensions { public static void ForEach<T>(this IEnumerable<T> t, Action<T> action) { foreach (var item in t) { action(item); } } } }
And that turned out to be all. IList<T>, ICollection<T>, everything that implements IEnumerable<T> – now sports a ForEach method. It even works for arrays, so if you have something like this
string[] arr = {"Hello", "World", "how", "about", "this"}; arr.ForEach(Console.WriteLine);It nicely prints out
Hello
World
how
about
this
I guess it's a start. Maybe it is of some use to someone, as I plod on ;-)