GetEnumerator (Método)

ReadOnlyCollection.GetEnumerator (Método)

Devuelve un enumerador que recorre en iteración la colección ReadOnlyCollection.

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

public IEnumerator<T> GetEnumerator ()
public final IEnumerator<T> GetEnumerator ()
public final function GetEnumerator () : IEnumerator<T>
No aplicable.

Valor devuelto

Interfaz IEnumerator para la colección ReadOnlyCollection.

La instrucción foreach del lenguaje C# (for each en Visual 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 se pueden utilizar para leer los datos de la colección, pero no para modificar la colección subyacente.

Inicialmente, el enumerador se coloca delante 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.

Current devuelve el mismo objeto hasta que se llama a 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 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 se puede volver a establecer la propiedad Current en el primer elemento de la colección, sino que se debe crear una nueva instancia del enumerador.

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 para la ejecución de subprocesos durante la enumeración, puede bloquear la colección durante toda la enumeración. 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 colecciones en System.Collections.Generic no están sincronizadas.

Este método es una operación O(1).

En el ejemplo de código siguiente se utiliza el enumerador para mostrar el contenido de una colección ReadOnlyCollection que ajusta una lista List. La instrucción foreach (For Each en Visual Basic, for each en C++) oculta el enumerador.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Tyrannosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Compsognathus");

        ReadOnlyCollection<string> readOnlyDinosaurs = 
            new ReadOnlyCollection<string>(dinosaurs);

        Console.WriteLine();
        foreach( string dinosaur in readOnlyDinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nCount: {0}", readOnlyDinosaurs.Count);

        Console.WriteLine("\nContains(\"Deinonychus\"): {0}", 
            readOnlyDinosaurs.Contains("Deinonychus"));

        Console.WriteLine("\nreadOnlyDinosaurs[3]: {0}", 
            readOnlyDinosaurs[3]);

        Console.WriteLine("\nIndexOf(\"Compsognathus\"): {0}", 
            readOnlyDinosaurs.IndexOf("Compsognathus"));

        Console.WriteLine("\nInsert into the wrapped List:");
        Console.WriteLine("Insert(2, \"Oviraptor\")");
        dinosaurs.Insert(2, "Oviraptor");

        Console.WriteLine();
        foreach( string dinosaur in readOnlyDinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        string[] dinoArray = new string[readOnlyDinosaurs.Count + 2];
        readOnlyDinosaurs.CopyTo(dinoArray, 1);

        Console.WriteLine("\nCopied array has {0} elements:", 
            dinoArray.Length);
        foreach( string dinosaur in dinoArray )
        {
            Console.WriteLine("\"{0}\"", dinosaur);
        }
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Deinonychus
Compsognathus

Count: 4

Contains("Deinonychus"): True

readOnlyDinosaurs[3]: Compsognathus

IndexOf("Compsognathus"): 3

Insert into the wrapped List:
Insert(2, "Oviraptor")

Tyrannosaurus
Amargasaurus
Oviraptor
Deinonychus
Compsognathus

Copied array has 7 elements:
""
"Tyrannosaurus"
"Amargasaurus"
"Oviraptor"
"Deinonychus"
"Compsognathus"
""
 */

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0

.NET Compact Framework

Compatible con: 2.0

XNA Framework

Compatible con: 1.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2016 Microsoft