2010-10-28 5 views
5

Je ne comprends pas très bien l'utilisation de IEnumerator dans les collections C#. Dans quel cas est-il utilisé et pourquoi devrait-il être utilisé?IEnumerator Objectif

J'ai essayé de regarder en ligne au http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx mais cet article n'a pas beaucoup de sens. La raison pour laquelle je demande est dans Unity3d Game Engine, il est utilisé avec la fonction de rendement. J'essaie de donner un sens à la raison de l'utilisation de IEnumerator.

Répondre

10

L'interface IEnumerator, lorsqu'elle est implémentée par une classe, permet de l'itérer en utilisant la syntaxe foreach intégrée.

Dans la classe qui doit être itérée pour l'interface IEnumerator, définit une signature de méthode pour la fonction GetEnumerator qui contrôle la boucle à travers l'objet.

public IEnumerator<OrderLine> GetEnumerator() 
    { 
     for (int i=0;i<maxItems;i++) 
     { 
      yield return item[i]; 
     } 
    } 

Comme vous pouvez le voir dans cet exemple, la déclaration vous permet de donné le contrôle de retour à l'appelant sans perdre sa place dans l'énumération. Le contrôle sera renvoyé à la ligne après l'instruction yield lorsque l'appelant atteint l'incrément suivant de la boucle foreach.

+0

habituellement on veut la comparaison stricte: 'pour (int i = 0; i Vlad

+0

Oups. Je suis trop pressé. Fixé. – JohnFx

+0

Not that IEnumerator est également l'interface de base utilisée par les méthodes d'extension définies dans Linq – David

1

Vous utilisez rarement IEnumerator explicitement, mais il existe de nombreuses méthodes d'extension qui fonctionnent avec, ainsi que le foreach. Toutes les collections l'implémentent, et c'est un exemple du modèle Iterator.

1

Il s'agit simplement d'une interface qui permet aux objets d'effectuer des opérations pour facilement parcourir les collections. Vous pouvez l'utiliser pour créer des objets qui parcourent une collection personnalisée avec une construction foreach ou une syntaxe similaire.