Qu'est-ce que c'est ?

« Image non disponibleRepeat » est méthode statique générique, qui n'est pas une méthode d'extension, avec une seule surcharge :

 
CacherSélectionnez
public static IEnumerable<TResult> Repeat<TResult>( 
    TResult element, 
    int count)

Elle retourne simplement une séquence contenant uniquement l'élément spécifié répété « count » fois. La seule validation de l'argument est que « count » ne doit pas être négatif.

Qu'allons-nous tester ?

Il n'y a vraiment pas beaucoup de choses à tester ici. J'ai pensé à quatre scénarios différents :

  • une séquence simple « répétition d'une chaîne trois fois » ;
  • une séquence vide « répétition d'une chaîne zéro fois » ;
  • une séquence contenant des valeurs null (juste pour prouver qu'un « élément » peut être null) ;
  • un comptage négatif pour prouver que la validation de l'argument se déclenche et cela très tôt.

J'ai bien peur que rien de cela ne soit vraiment passionnant.

Voyons l'implémentation !

Juste une chose qu'on pourrait être amené à mal faire ici, c'est la validation de l'argument directement dans un bloc itérateur… et nous avons déjà mis en place le pattern « méthode de fractionnement » tant de fois que nous n'allions pas tomber dans ce piège. Ainsi voici le code écrit sans aucune gloire :

 
CacherSélectionnez
public static IEnumerable<TResult> Repeat<TResult>(TResult element, int count) 
{ 
    if (count < 0) 
    { 
        throw new ArgumentOutOfRangeException("count"); 
    } 
    return RepeatImpl(element, count); 
} 

private static IEnumerable<TResult> RepeatImpl<TResult>(TResult element, int count) 
{ 
    for (int i = 0; i < count; i++) 
    { 
        yield return element; 
    } 
}

C'est tout. Hum, des points intéressants à noter… Aucun.

Conclusion

Il n'y a aucune raison à faire traîner les choses. Ce serait trop. Prochaine étape, Count et LongCount qui ont en fait quelques points intéressants.

Remerciements

Je tiens ici à remercier Jon Skeet de m'avoir autorisé à traduire son article Reimplementing LINQ to Objects: Part 6 - Repeat.

Je remercie rv26t pour sa relecture technique et ses propositions.

Je remercie également zoom61 pour sa relecture orthographique et ses propositions.