Qu'est-ce que c'est ?▲
«
Repeat» est méthode statique générique, qui n'est pas une méthode d'extension, avec une seule surcharge :
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 :
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.





