En C #, vous pouvez construire des méthodes avec le type de retour IEnumerable<T>
et utiliser yield return
et yield break
contrôler le flux. Voici un exemple simple qui utilise les deux contrôles:
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
yield break;
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield return i;
}
}
Ma question est la suivante: pourquoi a-t-il été initialement conçu pour utiliser deux mots-clés avec yield
et non pas comme celui-ci avec le single yield
"yielding the return value":
public IEnumerable<int> GetEvens(int start, int end) {
if(end < start)
return; // stop completely and return nothing
if(start & 2 != 0)
start++;
for(int i = start; i <= end; i+=2) {
yield i; // yield the current value.
}
}
Pour moi, c'est plus simple à lire et à comprendre.
yield x;
également une erreur de syntaxe à l'époque?yield
return
, vous n'avez même pas à vous soucier de savoir s'il s'agissait d'une erreur de syntaxe ou non. Le risque de collision devient nul.yield
alorsyield x;
ne serait pas une erreur de syntaxe, mais une déclaration variable valide.