Während einer Erkundungsreise in die Welt von Ruby, bin ich auf ein kleines und feines Feature gestoßen, dass mich nicht mehr losgelassen hat. Ich wollte so etwas unbedingt auch in C# haben…
Wer Ruby kennt, kennt auch die times Methode. Eine sehr elegante Alternative zur for-Schleife.
5.times { |i| puts i }
0
1
2
3
4
Diese Notation gefiel mir so sehr, dass ich beschloss etwas gleiches in C# umzusetzen. Dazu bot sich eine Extension-Method förmlich an.
Neben dem erweiterten Typ int übergebe ich einen Action delegate, der einen int Wert erwartet und innerhalb einer gekapselten for-Schleife ausgeführt wird. Übergeben wird der Wert der jeweiligen Iteration.
public static class NumericExtensions
{
public static void Times(this int count, Action<int> action)
{
for (int i = 0; i < count; i++)
{
action(i);
}
}
}
Der Aufruf hat jetzt eine gewisse Ähnlichkeit mit dem Ruby Original…
5.Times(x => Console.Out.WriteLine(string.Format("Runde {0}\r\n", x)));Das Ergebnis lässt sich sehen, es funktioniert.
Sicherlich bin ich nicht der Erste mit einem solchen Ansatz und über den Nutzen lässt sich sicherlich streiten, aber hey… ich finde es einfach großartig! Das gleiche werde ich wohl auch für die Methoden upto und downto machen.
Was denkt Ihr darüber? Ich würde mich über Kommentare freuen.
1 Kommentare:
sehr elegant. lambdaausdrücke sind so klar und einfach. erinnert mich ein bißchen an fluent interfaces die art und weise.
Kommentar veröffentlichen