Wie funktioniert die Dinner.GetRuleViolations Funktion NerdDinner Beispiel eine Liste zurückgeben?

StackOverflow https://stackoverflow.com/questions/1209054

Frage

Von dem, was ich gelesen habe,

yield return <value> 

springt aus der Funktion, sobald die Zeile ausgeführt wird. Allerdings Text Scott Guthrie zeigt an, dass

var errors = dinner.GetRuleViolations();

zieht erfolgreich eine Liste aller Regelverletzungen obwohl GetRuleViolations ist eine lange Liste von

if(String.someFunction(text))
    yield return new RuleViolation("Scary message");
if(String.anotherFunction(text))
    yield return new RuleViolation("Another scary message");

Wie funktionierts?

War es hilfreich?

Lösung

Es gibt nicht eine Liste. Es gibt eine IEnumerable<RuleViolation>. yield return gibt einen Wert in einem Iteratormethode . Ein Iterator ist eine einfache Möglichkeit, eine Folge von Elementen in einem Verfahren zu erzeugen.

Andere Tipps

Siehe Ausbeute (C # Referenz)

  

Die Ausbeute Schlüsselwort verwendet, was bekannt als   lazy evaluation. Was dies bedeutet,   praktisch ist, dass alles Folgende   ein „yield return“ wird nicht ausgewertet   bis sie von der angeforderten   enumerator.

Haben Sie auch einen Blick auf Eric Lippert Blog auf Iterator Blöcke.
Teil 1
Teil 2 - Warum keine Ref oder Out-Parameter
Teil 5 - Push-Pull vs
Teil 6 - Warum kein unsicherer Code

Es funktioniert, weil yield return Wert auf ein Enumerator-Objekt zurückgibt, im Grunde für Sie einige Sanitär-Code automatisieren (das heißt es ist syntaktischer Zucker). Es ist nicht das Verfahren dazu führen, zurückzukehren, dass yield break würde.

Weitere Informationen:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top