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.