Em C #, você pode construir métodos com o tipo de retorno IEnumerable<T>e usar yield returne yield breakcontrolar o fluxo. Aqui está um exemplo simples que usa os dois controles:
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;
}
}
Minha pergunta é: por que ele foi originalmente projetado para usar duas palavras-chave yielde não usá-lo como o seguinte com o único yield"produzindo o valor de retorno":
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.
}
}
Para mim, isso é mais simples de ler e entender.
yield x;Também não seria um erro de sintaxe na época?