IEnumerator(T) Interface
TOC
Réduire la table des matières
Développer la table des matières
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

IEnumerator<T>, interface

 

Prend en charge une itération simple sur une collection générique.

Espace de noms:   System.Collections.Generic
Assembly:  mscorlib (dans mscorlib.dll)

public interface IEnumerator<out T> : IDisposable, IEnumerator

Paramètres de type

T

Type des objets à énumérer.

NomDescription
System_CAPS_pubpropertyCurrent

Obtient l'élément de la collection situé à la position actuelle de l'énumérateur.

NomDescription
System_CAPS_pubmethodDispose()

Exécute les tâches définies par l'application associées à la libération ou à la redéfinition des ressources non managées.(Hérité de IDisposable.)

System_CAPS_pubmethodMoveNext()

Avance l'énumérateur à l'élément suivant de la collection.(Hérité de IEnumerator.)

System_CAPS_pubmethodReset()

Rétablit l'énumérateur à sa position initiale, qui précède le premier élément de la collection.(Hérité de IEnumerator.)

IEnumerator<T>est l'interface de base pour tous les énumérateurs génériques.

Le foreach instruction du langage c# (for each en C++, For Each en Visual Basic) masque la complexité des énumérateurs.Par conséquent, l'utilisation foreach est recommandé, plutôt que de manipuler l'énumérateur directement.

Les énumérateurs peuvent être utilisés pour lire les données dans la collection, mais ils ne peuvent pas être utilisés pour modifier la collection sous-jacente.

Initialement, l'énumérateur est positionné avant le premier élément dans la collection.À cette position, Current n'est pas défini.Par conséquent, vous devez appeler MoveNext pour avancer l'énumérateur au premier élément de la collection avant de lire la valeur de Current.

CurrentRetourne le même objet jusqu'à ce que MoveNext est appelée. MoveNextdéfinit Current à l'élément suivant.

Si MoveNext passe à la fin de la collection, l'énumérateur est positionnée après le dernier élément dans la collection et MoveNext retourne false.Lorsque l'énumérateur est à cette position, les appels suivants à MoveNext également retourner false.Si le dernier appel à MoveNext retourné false, Current n'est pas défini.Vous ne pouvez pas définir Current sur le premier élément de la collection ; Vous devez créer une nouvelle instance de l'énumérateur à la place.

Le Reset méthode est fournie pour l'interopérabilité COM.Il n'est pas nécessaire de mettre en oeuvre ; au lieu de cela, l'implémenteur peut simplement lever un NotSupportedException.Toutefois, si vous choisissez pour ce faire, vous devez vous assurer d'aucun appelant ne reposent sur le Reset fonctionnalité.

Un énumérateur reste valide tant que la collection reste inchangée.Si des modifications sont apportées à la collection, par ajout, modification, ou la suppression d'éléments, l'énumérateur est irrévocablement invalidé et l'appel suivant à MoveNext ou Reset lève une InvalidOperationException.

L'énumérateur ne dispose pas d'un accès exclusif à la collection. Par conséquent, l'énumération d'une collection n'est intrinsèquement pas une procédure thread-safe.Pour garantir la sécurité des threads pendant l'énumération, vous pouvez verrouiller la collection pendant toute l'énumération.Pour permettre la collection accessible par plusieurs threads pour lire et écrire, vous devez implémenter votre propre synchronisation.

Implémentations par défaut de collections dans le System.Collections.Generic espace de noms ne sont pas synchronisées.

Remarques à l'attention des implémenteurs :

L'implémentation de cette interface requiert l'implémentation non générique IEnumerator interface.Le MoveNext et Reset méthodes ne dépendent pas de Tet apparaissent uniquement sur l'interface non générique.Le Current propriété apparaît sur les deux interfaces et présente différents types de retour.Mettre en œuvre non générique IEnumerator.Current propriété comme une implémentation d'interface explicite.Cela permet à tout consommateur de l'interface non générique à utiliser l'interface générique.

En outre, IEnumerator<T> implémente IDisposable, auquel cas vous devez implémenter le Dispose (méthode).Cela vous permet de fermer les connexions de base de données ou de libérer les handles de fichiers ou des opérations similaires lors de l'utilisation d'autres ressources.S'il n'y a pas de ressources supplémentaires à supprimer, fournir vide Dispose implémentation.

L'exemple suivant illustre une implémentation de la IEnumerator<T> interface pour une classe de collection d'objets personnalisés.L'objet personnalisé est une instance du type Box, et la classe de collection est BoxCollection.Cet exemple de code fait partie d'un exemple plus complet fourni pour le ICollection<T> interface.


// Defines the enumerator for the Boxes collection.
// (Some prefer this class nested in the collection class.)
public class BoxEnumerator : IEnumerator<Box>
{
    private BoxCollection _collection;
    private int curIndex;
    private Box curBox;


    public BoxEnumerator(BoxCollection collection)
    {
        _collection = collection;
        curIndex = -1;
        curBox = default(Box);

    }

    public bool MoveNext()
    {
        //Avoids going beyond the end of the collection.
        if (++curIndex >= _collection.Count)
        {
            return false;
        }
        else
        {
            // Set current box to next item in collection.
            curBox = _collection[curIndex];
        }
        return true;
    }

    public void Reset() { curIndex = -1; }

    void IDisposable.Dispose() { }

    public Box Current
    {
        get { return curBox; }
    }


    object IEnumerator.Current
    {
        get { return Current; }
    }

}

Universal Windows Platform
Disponible depuis 4.5
.NET Framework
Disponible depuis 2.0
Portable Class Library
Pris en charge dans : portable .NET platforms
Silverlight
Disponible depuis 2.0
Windows Phone Silverlight
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher:
© 2016 Microsoft