Question

D'après ce que j'ai lu,

yield return <value> 

sort de la fonction au moment où la ligne est exécutée. Cependant, le texte de Scott Guthrie indique que

var errors = dinner.GetRuleViolations();

extrait avec succès une liste de toutes les violations de règles, même si GetRuleViolations est une longue liste de

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

Comment ça marche?

Était-ce utile?

La solution

Il ne renvoie pas de liste. Il retourne un IEnumerable<RuleViolation>. yield return retourne une valeur dans une méthode iterator Un itérateur est un moyen facile de générer une séquence d'éléments dans une méthode.

Autres conseils

Voir rendement (référence C #)

  

Le mot-clé de rendement utilise ce que l'on appelle   évaluation paresseuse. Qu'est-ce que cela signifie   est pratiquement que tout ce qui suit   un " return return " ne sera pas évalué   jusqu'à ce qu'il soit demandé à la   énumérateur.

Consultez également le blog d’Eric Lippert sur Iterator Blocks.
Partie 1
Partie 2 - Pourquoi aucun paramètre Ref ou Out
Partie 3 - Pourquoi enfin pas de rendement
Partie 4 - Pourquoi pas de rendement dans les prises
Partie 5 - Push vs Pull
Partie 6 - Pourquoi pas de code non sécurisé

Cela fonctionne car yield return renvoie une valeur à un objet énumérateur, en automatisant pour vous certains codes de plomberie (c’est-à-dire qu’il s’agit d’un sucre syntaxique). Cela ne provoque pas le retour de la méthode, ce serait yield break.

Plus d'informations:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top