In C # puoi costruire metodi con il tipo di ritorno di IEnumerable<T>
e usare yield return
e yield break
per controllare il flusso. Ecco un semplice esempio che utilizza entrambi i controlli:
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;
}
}
La mia domanda è: perché è stato originariamente progettato per utilizzare due parole chiave con yield
e non usarlo come segue con il singolo yield
"che fornisce il valore di ritorno":
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.
}
}
Per me, questo è più semplice da leggere e capire.