45 votes

Existe-t-il une manière élégante de répéter une action ?

En C#, en utilisant .NET Framework 4, existe-t-il un moyen élégant de répéter la même action un nombre déterminé de fois ? Par exemple, au lieu de :

 int repeat = 10;
for (int i = 0; i < repeat; i++)
{
    Console.WriteLine("Hello World.");
    this.DoSomeStuff();
}

J'aimerais écrire quelque chose comme :

 Action toRepeat = () =>
{
    Console.WriteLine("Hello World.");
    this.DoSomeStuff();
};

toRepeat.Repeat(10);

ou:

 Enumerable.Repeat(10, () =>
{
    Console.WriteLine("Hello World.");
    this.DoSomeStuff();
});

Je sais que je peux créer ma propre méthode d'extension pour le premier exemple, mais n'y a-t-il pas une fonctionnalité existante qui permet déjà de le faire ?

9voto

Aron Points 99

Pour la brièveté d'une seule doublure, vous pouvez le faire. Je ne sais pas ce que vous pensez...

 Enumerable.Repeat<Action>(() => 
{
    Console.WriteLine("Hello World.");
    this.DoSomeStuff();
}, 10).ToList().ForEach(x => x());

8voto

Bala R Points 57552

Sans déployer votre propre extension, je suppose que vous pouvez faire quelque chose comme ça

     Action toRepeat = () => {
        Console.WriteLine("Hello World.");
         this.DoSomeStuff();
    };

    int repeat = 10;
    Enumerable.Range(0, repeat).ToList().ForEach(i => toRepeat());

7voto

Ali Humayun Points 11
Enumerable.Repeat<Action>(() => { Console.WriteLine("Hello World"); this.DoSomething(); },10).ToList().ForEach(f => f.Invoke());

élégant n'est-ce pas ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X