In C # können Sie Methoden mit dem Rückgabetyp IEnumerable<T>
und erstellen yield return
und yield break
den Fluss steuern. Hier ist ein einfaches Beispiel, das beide Steuerelemente verwendet:
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;
}
}
Meine Frage ist, warum es ursprünglich entworfen wurde, um zwei Schlüsselwörter mit yield
und nicht wie das folgende mit der einzigen yield
"Rückgabe des Rückgabewerts" zu verwenden:
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.
}
}
Für mich ist das einfacher zu lesen und zu verstehen.
yield x;
auch ein Syntaxfehler gewesen?yield
return
, müssen Sie nicht einmal darüber nachdenken, ob es ein Syntaxfehler war oder nicht. Die Wahrscheinlichkeit einer Kollision wird Null.yield
dannyield x;
kein Syntaxfehler sein würde, aber eine gültige Variablendeklaration.