7
votes

Où puis-je apprendre les outs des énumérateurs en C #?

Y a-t-il une bonne ressource qui explique le concept d'énumérateurs et d'énumérateurs personnalisés? Particulièrement avec un bon exemple solide de la raison pour laquelle vous voudriez mettre en œuvre iEnumerable vous et comment vous l'utiliseriez efficacement?

Je rencontre occasionnellement rendement et j'essaie de mieux comprendre.


4 commentaires

@SLC attends la réponse de Jon Skeet ....


@leppie qu'est-ce que ça veut dire?


@Leppie Gotcha, il dit indifférent ... Je n'ai jamais voulu dire que votre réponse était indifférente à cette question ...


@Pandiya Chendeur: Il semble que vous attendiez que Jon réponde à toutes les questions ... Vous ne devriez pas vous attendre à rien surtout si c'est gratuit.


5 Réponses :


8
votes

L'exemple le plus facile: xxx

usage: xxx

Pour le voir en action, placez un point d'arrêt de débogueur sur toutes les lignes du getNames méthode.


5 commentaires

Cela a du sens, mais pouvez-vous expliquer comment la méthode de compte () fonctionne? Est-ce que cela force l'énumérateur à parcourir tous les résultats pour les compter? En outre, pourquoi certains code ont-ils une «pause-rendement»?


Pause de rendement dit essentiellement "Arrêt, plus d'éléments". Et oui, comptez () (pas compte ou longueur ) itérale toute la collection s'il n'a pas de raccourci (par exemple, Comptez et longueur ).


merci Lappie! Ça commence à avoir un sens maintenant, mais que voulez-vous dire par raccourci?


Le type sous-jacent du ienumerable peut être une liste ou un tableau ou un tableau ou un hashtable , tout ce qui a une propriété déterminer la longueur / le nombre sans avoir à traverser toute la collection.


getNames (). ellementat (4) a-t-il goin 'on.



0
votes

Un bon exemple peut être trouvé sur la page MSDN pour IEnumerable .


3 commentaires

Vous voudrez peut-être donner un lien anglais :)


Je pensais avoir commuté ma culture à en-nous ... Thx!


Malheureusement, cet échantillon ne couvre pas le rendement, ce qui est probablement la vraie source de confusion.



1
votes

Le meilleur exemple et la référence que j'ai trouvée est en fait dans le livre C # en profondeur Book du Skeet Jon Tout-Puissant. Ce n'est pas trop coûteux et ça vaut le coup pour tout ce que vous allez apprendre sur C #.


3 commentaires

Notez que c'est le chapitre 6 de la 1ère édition, qui était (et probablement toujours) l'un des chapitres d'échantillonnage libres.


Demandez à un lien: manning-source.com/books/skeet/chapter6sample.pdf < / a>


@Martinho: Malheureusement, le lien direct ne fonctionne pas. Vous devez passer par Manning.com/skeet Premièrement, je soupçonne qu'il vérifie le référentiel. Mais oui, c'est toujours libre :)



3
votes

Un autre livre que j'ai trouvé assez utile lorsque j'apprendais à propos d'Ienumerable et Ienumerator est le livre Pro C # 2008 de Troelsen. Il explique ce que les interfaces contiennent et comment construire des itérateurs avec le mot-clé "Rendement".

J'espère que cette aide.


0 commentaires

2
votes

Voici quelques ressources supplémentaires pour après avoir obtenu les bases.

WES a un excellent article sur les caractéristiques de performance des itérateurs:

http: //blogs.msdn .Com / Wesdyer / Archive / 2007/03/23 / Tous points-itérators.aspx

Si vous avez des questions sur pourquoi il y a tellement de restrictions étranges sur ce que vous pouvez faire dans un bloc Itérateur, voici ma série de sept parties sur ce qui a motivé les règles inhabituelles:

http://blogs.msdn.com/ericlippert/archive /tags/iterators/default.aspx


0 commentaires