Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

IEnumerator<T> (Interfaz)

Admite una iteración simple en una colección genérica.

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

public interface IEnumerator<out T> : IDisposable, 
	IEnumerator

Parámetros de tipo

out T

Tipo de los objetos que se van a enumerar.

Este parámetro de tipo es covariante. Es decir, puede usar el tipo especificado o cualquier tipo que sea más derivado. Para obtener más información sobre la covarianza y la contravarianza, vea Covarianza y contravarianza en genéricos.

El tipo IEnumerator<T> expone los siguientes miembros.

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCurrentObtiene el elemento de la colección situado en la posición actual del enumerador.
Arriba

  NombreDescripción
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDisposeRealiza tareas definidas por la aplicación asociadas a la liberación o al restablecimiento de recursos no administrados. (Se hereda de IDisposable).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMoveNextDesplaza el enumerador al siguiente elemento de la colección. (Se hereda de IEnumerator).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsResetEstablece el enumerador en su posición inicial (antes del primer elemento de la colección). (Se hereda de IEnumerator).
Arriba

IEnumerator<T> es la interfaz base de todos los enumeradores genéricos.

La instrucción foreach del lenguaje C# (for each en C++, For Each en Visual Basic) oculta la complejidad de los enumeradores. Por tanto, se recomienda el uso de foreach en lugar de manipular directamente el enumerador.

Los enumeradores pueden utilizarse para leer los datos de la colección, pero no se pueden utilizar para modificar la colección subyacente.

Inicialmente, el enumerador se coloca antes del primer elemento de la colección. En esta posición, el valor de la propiedad Current está sin definir. Por lo tanto, debe llamar a MoveNext para adelantar el enumerador hasta el primer elemento de la colección antes de leer el valor de Current.

El método Current devuelve el mismo objeto hasta que se llama al método MoveNext. MoveNext establece Current en el elemento siguiente.

Si MoveNext pasa el final de la colección, el enumerador se coloca detrás del último elemento de la colección y MoveNext devuelve el valor false. Cuando el enumerador está en esta posición, las llamadas posteriores al método MoveNext también devuelven false. Si la última llamada al método MoveNext devuelve false, el valor de la propiedad Current queda sin definir. No puede volver a establecer la propiedad Current en el primer elemento de la colección, sino que debe crear una nueva instancia del enumerador.

El método Reset se proporciona para que exista interoperabilidad COM. No es necesario que se implemente forzosamente; en su lugar, el implementador puede producir una excepción NotSupportedException.

Mientras no se modifique la colección, el enumerador seguirá siendo válido. Si se realizan cambios en la colección, como agregar, modificar o eliminar elementos, el enumerador se invalida definitivamente y su comportamiento queda sin definir.

El enumerador no tiene acceso exclusivo a la colección; por lo tanto, la enumeración a través de una colección es un procedimiento que, por naturaleza, no es seguro para la ejecución de subprocesos. Para garantizar la seguridad en la ejecución de subprocesos durante la enumeración, puede bloquear la colección durante la enumeración completa. Para permitir que varios subprocesos obtengan acceso de lectura y escritura a la colección, debe implementar su propia sincronización.

Las implementaciones predeterminadas de las colecciones del espacio de nombres System.Collections.Generic no están sincronizadas.

Notas para los implementadores

Para implementar esta interfaz es necesario implementar la interfaz IEnumerator no genérica. Los métodos MoveNext y Reset no dependen de T y sólo aparecen en la interfaz no genérica. La propiedad Current aparece en ambas interfaces y tiene tipos de devolución diferentes. Implemente la propiedad IEnumerator.Current no genérica como una implementación de interfaz explícita. Así se permite que cualquier consumidor de la interfaz no genérica utilice la interfaz genérica.

En el siguiente ejemplo se muestra una implementación de la interfaz IEnumerator<T> para una clase de colección de objetos personalizados. El objeto personalizado es una instancia del tipo Box y la clase de colección es BoxCollection. Este ejemplo de código forma parte de un ejemplo más extenso relativo a la interfaz 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

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: 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 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft