Exporter (0) Imprimer
Développer tout
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

out T

Type des objets à énumérer.

Ce paramètre de type est covariant. Autrement dit, vous pouvez utiliser le type que vous avez spécifié ou tout type plus dérivé. Pour plus d'informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.

Le type IEnumerator<T> expose les membres suivants.

  NomDescription
Propriété publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreCurrentObtient l'élément de la collection situé à la position actuelle de l'énumérateur.
Début

  NomDescription
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreDisposeExé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.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreMoveNextAvance l'énumérateur à l'élément suivant de la collection. (Hérité de IEnumerator.)
Méthode publiquePris en charge par XNA FrameworkPris en charge par Bibliothèque de classes portablePris en charge dans .NET pour les applications du Windows StoreResetRétablit l'énumérateur à sa position initiale, qui précède le premier élément de la collection. (Hérité de IEnumerator.)
Début

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

L'instruction foreach du langage C# (for each en C++, For Each en Visual Basic) cache la complexité des énumérateurs. Il est donc recommandé d'utiliser foreach plutôt que de manipuler directement l'énumérateur.

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

L'énumérateur est initialement positionné avant le premier élément de 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 la lecture de la valeur de Current.

Current retourne le même objet jusqu'à l'appel de MoveNext. MoveNext affecte Current à l'élément suivant.

Si MoveNext passe la fin de la collection, l'énumérateur est placé après le dernier élément de la collection et MoveNext retourne false. Lorsque l'énumérateur se trouve à cette position, les appels suivants à MoveNext retournent également false. Si le dernier appel à MoveNext a retourné false, Current n'est pas défini. Vous ne pouvez pas affecter de nouveau à Current le premier élément de la collection ; créez à la place une nouvelle instance de l'énumérateur.

La méthode Reset est fournie pour l'interopérabilité COM. Elle ne doit pas nécessairement être implémentée ; au lieu de cela, l'implémenteur peut simplement lever un NotSupportedException.

Un énumérateur reste valide tant que la collection reste inchangée. Si la collection est modifiée en ajoutant, modifiant ou supprimant des éléments, l'énumérateur devient irrévocablement non valide et son comportement n'est pas défini.

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 la durée de cette opération. Pour permettre à plusieurs threads d'accéder en lecture et en écriture à la collection, vous devez implémenter votre propre synchronisation.

Les implémentations par défaut de collections dans l'espace de noms System.Collections.Generic ne sont pas synchronisées.

Remarques à l'attention des implémenteurs

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

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



// 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; }
    }

}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft