Lire en anglais

Partager via


IEnumerable Interface

Définition

Expose un énumérateur, qui prend en charge une itération simple sur une collection non générique.

C#
public interface IEnumerable
C#
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
C#
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[System.Runtime.InteropServices.ComVisible(true)]
public interface IEnumerable
Dérivé
Attributs

Exemples

L’exemple de code suivant illustre la meilleure pratique pour itérer une collection personnalisée en implémentant les interfaces IEnumerable et IEnumerator. Dans cet exemple, les membres de ces interfaces ne sont pas explicitement appelés, mais ils sont implémentés pour prendre en charge l’utilisation de foreach (For Each en Visual Basic) pour itérer dans la collection. Cet exemple est une application console complète. Pour compiler l’application Visual Basic, remplacez l’objet Startup par sous- principal dans la page Propriétés du projet.

C#
using System;
using System.Collections;

// Simple business object.
public class Person
{
    public Person(string fName, string lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }

    public string firstName;
    public string lastName;
}

// Collection of Person objects. This class
// implements IEnumerable so that it can be used
// with ForEach syntax.
public class People : IEnumerable
{
    private Person[] _people;
    public People(Person[] pArray)
    {
        _people = new Person[pArray.Length];

        for (int i = 0; i < pArray.Length; i++)
        {
            _people[i] = pArray[i];
        }
    }

// Implementation for the GetEnumerator method.
    IEnumerator IEnumerable.GetEnumerator()
    {
       return (IEnumerator) GetEnumerator();
    }

    public PeopleEnum GetEnumerator()
    {
        return new PeopleEnum(_people);
    }
}

// When you implement IEnumerable, you must also implement IEnumerator.
public class PeopleEnum : IEnumerator
{
    public Person[] _people;

    // Enumerators are positioned before the first element
    // until the first MoveNext() call.
    int position = -1;

    public PeopleEnum(Person[] list)
    {
        _people = list;
    }

    public bool MoveNext()
    {
        position++;
        return (position < _people.Length);
    }

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

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

    public Person Current
    {
        get
        {
            try
            {
                return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
}

class App
{
    static void Main()
    {
        Person[] peopleArray = new Person[3]
        {
            new Person("John", "Smith"),
            new Person("Jim", "Johnson"),
            new Person("Sue", "Rabon"),
        };

        People peopleList = new People(peopleArray);
        foreach (Person p in peopleList)
            Console.WriteLine(p.firstName + " " + p.lastName);
    }
}

/* This code produces output similar to the following:
 *
 * John Smith
 * Jim Johnson
 * Sue Rabon
 *
 */

Remarques

IEnumerable est l’interface de base de toutes les collections non génériques qui peuvent être énumérées. Pour obtenir la version générique de cette interface, consultez System.Collections.Generic.IEnumerable<T>. IEnumerable contient une méthode unique, GetEnumerator, qui retourne une IEnumerator. IEnumerator offre la possibilité d’itérer au sein de la collection en exposant une propriété Current et des méthodes MoveNext et Reset.

Il est recommandé d’implémenter des IEnumerable et des IEnumerator sur vos classes de collection pour activer la syntaxe foreach (For Each en Visual Basic), mais l’implémentation de IEnumerable n’est pas nécessaire. Si votre collection n’implémente pas IEnumerable, vous devez toujours suivre le modèle d’itérateur pour prendre en charge cette syntaxe en fournissant une méthode GetEnumerator qui retourne une interface, une classe ou un struct. Lorsque vous utilisez Visual Basic, vous devez fournir une implémentation IEnumerator, qui est retournée par GetEnumerator. Lors du développement avec C#, vous devez fournir une classe qui contient une propriété Current, ainsi que des méthodes MoveNext et Reset comme décrit par IEnumerator, mais la classe n’a pas besoin d’implémenter IEnumerator.

Méthodes

GetEnumerator()

Retourne un énumérateur qui itère dans une collection.

Méthodes d’extension

Cast<TResult>(IEnumerable)

Convertit les éléments d’un IEnumerable en type spécifié.

OfType<TResult>(IEnumerable)

Filtre les éléments d’une IEnumerable en fonction d’un type spécifié.

AsParallel(IEnumerable)

Active la parallélisation d’une requête.

AsQueryable(IEnumerable)

Convertit un IEnumerable en IQueryable.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Voir aussi