W języku C # możesz konstruować metody z typem zwracanym IEnumerable<T>
i używać yield return
oraz yield break
kontrolować przepływ. Oto prosty przykład, który wykorzystuje obie kontrolki:
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;
}
}
Moje pytanie brzmi: dlaczego pierwotnie zostało zaprojektowane, aby używać dwóch słów kluczowych yield
i nie używać go w następujący sposób z pojedynczym yield
„zwracaniem wartości zwracanej”:
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.
}
}
Dla mnie jest to łatwiejsze do odczytania i zrozumienia.
yield x;
też nie byłby błąd składniowy?yield
return
, nie musisz nawet niepokoić się myślami o tym, czy był to błąd składniowy, czy nie. Szansa na kolizję wynosi zero.yield
toyield x;
nie byłby to błąd składniowy, ale prawidłowa deklaracja zmiennej.