Hashtable.GetEnumerator Método

Definición

Devuelve un IDictionaryEnumerator objeto que recorre en iteración .Hashtable

public:
 virtual System::Collections::IDictionaryEnumerator ^ GetEnumerator();
public virtual System.Collections.IDictionaryEnumerator GetEnumerator();
abstract member GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
Public Overridable Function GetEnumerator () As IDictionaryEnumerator

Devoluciones

para IDictionaryEnumerator .Hashtable

Implementaciones

Ejemplos

En el ejemplo siguiente se compara el uso de GetEnumerator y foreach para enumerar el contenido de .Hashtable

using System;
using System.Collections;

public class HashtableExample
{
    public static void Main()
    {
        // Creates and initializes a new Hashtable.
        Hashtable clouds = new Hashtable();
        clouds.Add("Cirrus", "Castellanus");
        clouds.Add("Cirrocumulus", "Stratiformis");
        clouds.Add("Altostratus", "Radiatus");
        clouds.Add("Stratocumulus", "Perlucidus");
        clouds.Add("Stratus", "Fractus");
        clouds.Add("Nimbostratus", "Pannus");
        clouds.Add("Cumulus", "Humilis");
        clouds.Add("Cumulonimbus", "Incus");

        // Displays the keys and values of the Hashtable using GetEnumerator()

        IDictionaryEnumerator denum = clouds.GetEnumerator();
        DictionaryEntry dentry;

        Console.WriteLine();
        Console.WriteLine("    Cloud Type       Variation");
        Console.WriteLine("    -----------------------------");
        while (denum.MoveNext())
        {
            dentry = (DictionaryEntry) denum.Current;
            Console.WriteLine("    {0,-17}{1}", dentry.Key, dentry.Value);
        }
        Console.WriteLine();

        // Displays the keys and values of the Hashtable using foreach statement

        Console.WriteLine("    Cloud Type       Variation");
        Console.WriteLine("    -----------------------------");
        foreach (DictionaryEntry de in clouds)
        {
            Console.WriteLine("    {0,-17}{1}", de.Key, de.Value);
        }
        Console.WriteLine();
    }
}

// The program displays the following output to the console:
//
//    Cloud Type       Variation
//    -----------------------------
//    Cirrocumulus     Stratiformis
//    Stratocumulus    Perlucidus
//    Cirrus           Castellanus
//    Cumulus          Humilis
//    Nimbostratus     Pannus
//    Stratus          Fractus
//    Altostratus      Radiatus
//    Cumulonimbus     Incus
//
//    Cloud Type       Variation
//    -----------------------------
//    Cirrocumulus     Stratiformis
//    Stratocumulus    Perlucidus
//    Cirrus           Castellanus
//    Cumulus          Humilis
//    Nimbostratus     Pannus
//    Stratus          Fractus
//    Altostratus      Radiatus
//    Cumulonimbus     Incus*/
Imports System.Collections

Public Class HashtableExample
    Public Shared Sub Main()
        ' Creates and initializes a new Hashtable.
        Dim clouds As New Hashtable()
        clouds.Add("Cirrus", "Castellanus")
        clouds.Add("Cirrocumulus", "Stratiformis")
        clouds.Add("Altostratus", "Radiatus")
        clouds.Add("Stratocumulus", "Perlucidus")
        clouds.Add("Stratus", "Fractus")
        clouds.Add("Nimbostratus", "Pannus")
        clouds.Add("Cumulus", "Humilis")
        clouds.Add("Cumulonimbus", "Incus")

        ' Displays the keys and values of the Hashtable using GetEnumerator()

        Dim denum As IDictionaryEnumerator = clouds.GetEnumerator()
        Dim dentry As DictionaryEntry

        Console.WriteLine()
        Console.WriteLine("    Cloud Type       Variation")
        Console.WriteLine("    -----------------------------")
        While denum.MoveNext()
            dentry = CType(denum.Current, DictionaryEntry)
            Console.WriteLine("    {0,-17}{1}", dentry.Key, dentry.Value)
        End While
        Console.WriteLine()

        ' Displays the keys and values of the Hashtable using foreach statement

        Console.WriteLine("    Cloud Type       Variation")
        Console.WriteLine("    -----------------------------")
        For Each de As DictionaryEntry in clouds
            Console.WriteLine("    {0,-17}{1}", de.Key, de.Value)
        Next de
        Console.WriteLine()
    End Sub
End Class

' The program displays the following output to the console:
'
'    Cloud Type       Variation
'    -----------------------------
'    Cirrocumulus     Stratiformis
'    Stratocumulus    Perlucidus
'    Cirrus           Castellanus
'    Cumulus          Humilis
'    Nimbostratus     Pannus
'    Stratus          Fractus
'    Altostratus      Radiatus
'    Cumulonimbus     Incus
'
'    Cloud Type       Variation
'    -----------------------------
'    Cirrocumulus     Stratiformis
'    Stratocumulus    Perlucidus
'    Cirrus           Castellanus
'    Cumulus          Humilis
'    Nimbostratus     Pannus
'    Stratus          Fractus
'    Altostratus      Radiatus
'    Cumulonimbus     Incus*/

Comentarios

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

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

Inicialmente, el enumerador se coloca antes del primer elemento de la colección. Reset también devuelve el enumerador a esta posición. En esta posición, Current no está definido. Por lo tanto, debe llamar MoveNext a para avanzar el enumerador al primer elemento de la colección antes de leer el valor de Current.

Current devuelve el mismo objeto hasta MoveNext que se llama a o Reset . MoveNext establece Current en el elemento siguiente.

Si MoveNext pasa el final de la colección, el enumerador se coloca después del último elemento de la colección y MoveNext devuelve false. Cuando el enumerador está en esta posición, las llamadas posteriores a MoveNext también devuelven false. Si la última llamada a MoveNext se falsedevuelve , Current no está definida. Para volver a establecer Current en el primer elemento de la colección, puede llamar a Reset seguido de MoveNext.

Un enumerador sigue siendo válido siempre que la colección permanezca sin cambios. Si se realizan cambios en la colección, como agregar, modificar o eliminar elementos, el enumerador se invalida irrecuperablemente y su comportamiento no está definido.

El enumerador no tiene acceso exclusivo a la colección; por lo tanto, la enumeración a través de una colección no es intrínsecamente un procedimiento seguro para subprocesos. Para garantizar la seguridad de los subprocesos durante la enumeración, puede bloquear la colección durante toda la enumeración. Para permitir que varios subprocesos puedan acceder a la colección para leer y escribir, debe implementar su propia sincronización.

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

Dado que serializar y deserializar un enumerador para un Hashtable puede hacer que los elementos se reordenen, no es posible continuar la enumeración sin llamar al Reset método .

Se aplica a

Consulte también