2009-07-30 3 views
2

Von dem, was ich gelesen habe,Wie gibt die Funktion Dinner.GetRuleViolations des NerdDinner-Beispiels eine Liste zurück?

yield return <value> 

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

var errors = dinner.GetRuleViolations(); 

erfolgreich sogar eine Liste aller Regelverletzungen zieht 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?

Antwort

6

Es gibt keine Liste zurück. Es gibt eine IEnumerable<RuleViolation> zurück. yield return gibt einen Wert in iterator method zurück. Ein Iterator ist eine einfache Methode zum Generieren einer Sequenz von Elementen in einer Methode.

0

Es funktioniert, weil yield return einen Wert an ein Enumerator-Objekt zurückgibt, im Grunde einige Sanitär-Code für Sie automatisieren (d. H. Es ist syntaktischer Zucker). Die Methode wird nicht zurückgegeben, das wäre yield break.

Weitere Informationen:

Verwandte Themen