Daniel Hoelbling-Inzko talks about programming
A very long time ago I went through the Ruby in 20 minutes tutorial when I saw this:
@names.each do |name| puts "Hallo, #{name}!" end
When C# came out later I always wondered why there is no functional equivalent on the IEnumerable<T> interface, since it would be a perfect place for quick inline method calls without having to write a full foreach statement.
At that time my knowledge of extension methods and delegates was too limited to do this myself, but that doesn’t mean it has to stay that way.
I finally remembered that I never got to it last time and implemented it today.
Oh and it’s so damn easy too:
public static class EachExtension { public static void Each<T>(this IEnumerable<T> enumberable, Action<T> action) { foreach (var item in enumberable) { action(item); } } }
To use this .Each method now you simply need to be using the Namespace where the EachExtension is in and you can write code like this:
IEnumerable<string> x = new[] {"hello", "world", "how", "are", "you"}; x.Each(Console.WriteLine);
Or with multiple parameters:
IEnumerable<string> x = new[] {"hello", "world", "how", "are", "you"}; x.Each(p => Console.WriteLine("{0}", p));
Or, even whole inline method bodies:
IEnumerable<string> x = new[] {"hello", "world", "how", "are", "you"}; x.Each(p => { Console.Write("Word:"); Console.WriteLine(p); });
So, Lambdas are fun after all :)