Perché la parola chiave yield è utilizzata insieme a return and break e non da sola?

11

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.

    
posta Moop 26.09.2013 - 23:01
fonte

1 risposta

13

La sintassi leggermente scomoda di yield return è stata creata in modo che il codice esistente utilizzato la parola "resa" come identificatore (nome variabile) non si rompe . (È perfettamente logico, ad esempio, avere una variabile denominata yield se si sta lavorando con codice finanziario.) Poiché "yield return" sarebbe stato un errore di sintassi, la nuova sintassi non avrebbe infranto alcun codice esistente .

Per quanto riguarda yield break , nessuna idea. Questo in realtà non sembra avere una buona ragione che possa trovare.

    
risposta data 26.09.2013 - 23:10
fonte

Leggi altre domande sui tag