En C #, puede construir métodos con el tipo de retorno IEnumerable<T>y el uso yield returny yield breakpara controlar el flujo. Aquí hay un ejemplo simple que usa ambos 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;
}
}
Mi pregunta es, ¿por qué se diseñó originalmente para usar dos palabras clave yieldy no usarlo de la siguiente manera con el único yield"rendimiento del 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 mí, esto es más fácil de leer y entender.

yield x;también un error de sintaxis en ese entonces?yieldreturn, ni siquiera tiene que molestarse en pensar si fue un error de sintaxis o no. La posibilidad de una colisión se convierte en cero.yieldentoncesyield x;no sería un error de sintaxis, sino una declaración de variable válida.