Ler em inglês

Compartilhar via


IEnumerable Interface

Definição

Expõe um enumerador, que dá suporte a uma iteração simples em uma coleção não genérica.

public interface IEnumerable
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[System.Runtime.InteropServices.ComVisible(true)]
public interface IEnumerable
Derivado
Atributos

Exemplos

O exemplo de código a seguir demonstra a melhor prática para iterar uma coleção personalizada implementando as interfaces IEnumerable e IEnumerator. Neste exemplo, os membros dessas interfaces não são explicitamente chamados, mas são implementados para dar suporte ao uso de foreach (For Each no Visual Basic) para iterar por meio da coleção. Este exemplo é um aplicativo de Console completo. Para compilar o aplicativo Do Visual Basic, altere o objeto Startup para sub-main na página propriedades do do projeto.

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
 *
 */

Comentários

IEnumerable é a interface base para todas as coleções não genéricas que podem ser enumeradas. Para obter a versão genérica dessa interface, consulte System.Collections.Generic.IEnumerable<T>. IEnumerable contém um único método, GetEnumerator, que retorna um IEnumerator. IEnumerator fornece a capacidade de iterar por meio da coleção expondo uma propriedade Current e métodos MoveNext e Reset.

É uma prática recomendada implementar IEnumerable e IEnumerator em suas classes de coleção para habilitar a sintaxe foreach (For Each no Visual Basic), no entanto, a implementação de IEnumerable não é necessária. Se sua coleção não implementar IEnumerable, você ainda deverá seguir o padrão de iterador para dar suporte a essa sintaxe fornecendo um método GetEnumerator que retorna uma interface, classe ou struct. Ao usar o Visual Basic, você deve fornecer uma implementação de IEnumerator, que é retornada por GetEnumerator. Ao desenvolver com C#, você deve fornecer uma classe que contenha uma propriedade Current e métodos MoveNext e Reset conforme descrito por IEnumerator, mas a classe não precisa implementar IEnumerator.

Métodos

GetEnumerator()

Retorna um enumerador que itera por meio de uma coleção.

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Aplica-se a

Produto Versões
.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

Confira também