La boucle "times" de Ruby en C#

2013-02-06 #csharp#ruby

Pour mon billet sur les boucles en Ruby, j'étais tombé sur une version de l'itérateur times de Ruby porté sur C# :

public static class Extensions
{
    public static void Times(this int count, Action action)
    {
        for (int i=0; i < count; i++)
        {
             action();
        }
    }

    public static void Times(this int count, Action<int> action)
    {
        for (int i=0; i < count; i++)
        {
             action(i);
        }
    }
}

Ça s'utilise aussi simplement que ça :

5.Times(() => Console.WriteLine("Hi"));
5.Times(i => Console.WriteLine("Index: {0}", i));

Source : Any chances to imitate times() Ruby method in C#? et c'est une réponse de Jon Skeet. Le Jon Skeet !

Et maintenant, grâce à cette extension, je peux remplacer ce "vieux" code :

for (int i = 0; i < 5; i++)
{
  var fois2 = i + i;
  Console.WriteLine(fois2);
}

Par ça :

5.Times(i => {
  var fois2 = i + i;
  Console.WriteLine(fois2);
});

Pour qu'il ait un meilleur goût de Ruby :

5.times do |i|
  fois2 = i + i
  puts fois2
end