Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Interfaz IEnumerable

 

Expone un enumerador, que admite una iteración simple en una colección no genérica.

Para examinar el código fuente de .NET Framework para este tipo, consulte el Reference Source.

Espacio de nombres:   System.Collections
Ensamblado:  mscorlib (en mscorlib.dll)

[GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[ComVisibleAttribute(true)]
public interface IEnumerable

NombreDescripción
System_CAPS_pubmethodGetEnumerator()

Devuelve un enumerador que recorre en iteración una colección.

NombreDescripción
System_CAPS_pubmethodAsParallel()

Sobrecargado. Habilita la paralelización de una consulta.(Definido por ParallelEnumerable).

System_CAPS_pubmethodAsQueryable()

Sobrecargado. Convierte un IEnumerable para un IQueryable.(Definido por Queryable).

System_CAPS_pubmethodCast<TResult>()

Convierte los elementos de un IEnumerable al tipo especificado.(Definido por Enumerable).

System_CAPS_pubmethodOfType<TResult>()

Filtra los elementos de un IEnumerable basado en un tipo especificado.(Definido por Enumerable).

System_CAPS_noteNota

Para ver el código fuente de .NET Framework para este tipo, consulte el Reference Source. Puede examinar el código fuente en línea, descargar la referencia para visualizarlo sin conexión y paso a paso el código fuente (incluidas revisiones y actualizaciones) durante la depuración; see instructions.

IEnumerablees la interfaz base para todas las colecciones no genéricas que se pueden enumerar. Para obtener la versión genérica de esta interfaz, vea System.Collections.Generic.IEnumerable<T>. IEnumerablecontiene un método único, GetEnumerator, que devuelve un IEnumerator. IEnumeratorproporciona la capacidad para recorrer en iteración la colección mediante la exposición de un Current propiedad y MoveNext y Reset métodos.

Es una práctica recomendada de implementar IEnumerable y IEnumerator en las clases de colección para habilitar el foreach (For Each en Visual Basic) sintaxis, sin embargo implementar IEnumerable no es necesario. Si la colección no implementa IEnumerable, todavía debe seguir el patrón de iterador para que admita esta sintaxis proporcionando un GetEnumerator método que devuelve una interfaz, clase o struct. Cuando se utiliza Visual Basic, debe proporcionar un IEnumerator implementación, que es devuelto por GetEnumerator. Cuando el desarrollo con C#, debe proporcionar una clase que contiene un Current propiedad, y MoveNext y Reset métodos como se describe en IEnumerator, pero la clase no tiene que implementar IEnumerator.

En el ejemplo de código siguiente se muestra el procedimiento recomendado para recorrer en iteración una colección personalizada implementando la IEnumerable y IEnumerator interfaces. En este ejemplo, los miembros de estas interfaces no se llama explícitamente, pero se implementan para admitir el uso de foreach (For Each en Visual Basic) para recorrer en iteración la colección. En este ejemplo es una aplicación de consola completa. Para compilar la aplicación de Visual Basic, cambie la objeto de inicio a Sub Main en el proyecto propiedades página.

Para obtener un ejemplo que muestra cómo implementar el IEnumerable de la interfaz, veaImplementing the IEnumerable Interface in a Collection Class

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: