Hashtable.GetEnumerator Metoda

Definice

Vrátí hodnotu IDictionaryEnumerator , která iteruje přes 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

Návraty

An IDictionaryEnumerator pro Hashtable.

Implementuje

Příklady

Následující příklad porovnává použití GetEnumerator a foreach k výčtu obsahu objektu Hashtable.

using namespace System;
using namespace System::Collections;

public class HashtableExample
{
public:
    static void Main()
    {
        // Creates and initializes a new Hashtable.
        Hashtable^ clouds = gcnew 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("    -----------------------------");
        for each (DictionaryEntry de in clouds)
        {
            Console::WriteLine("    {0,-17}{1}", de.Key, de.Value);
        }
        Console::WriteLine();
    }
};

int main()
{
    HashtableExample::Main();
}

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

Poznámky

Příkaz foreach jazyka C# (for each v jazyce Visual Basic) skrývá složitost enumerátorů. Proto se doporučuje použít foreach místo přímé manipulace s enumerátorem.

Enumerátory lze používat ke čtení dat v kolekci, nikoli však k úpravě zdrojové kolekce.

Zpočátku je enumerátor umístěn před prvním prvkem v kolekci. Reset také vrátí enumerátor zpět na tuto pozici. Na této pozici Current není definován. Proto je nutné před čtením hodnoty Currentvolat MoveNext k posunu enumerátoru na první prvek kolekce.

Current vrátí stejný objekt, dokud není volána hodnota MoveNext nebo Reset . MoveNext nastaví Current na další prvek.

Pokud MoveNext projde konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí false. Když je enumerátor na této pozici, následné volání také MoveNext vrátí false. Pokud je poslední volání MoveNext vráceno false, Current není definováno. Pokud chcete znovu nastavit Current první prvek kolekce, můžete volat Reset a potom MoveNext.

Enumerátor zůstane platný, dokud kolekce zůstane beze změny. Pokud jsou v kolekci provedeny změny, například přidání, úprava nebo odstranění prvků, je enumerátor nenávratně zneplatněna a jeho chování není definováno.

Enumerátor nemá výhradní přístup ke kolekci; proto výčet prostřednictvím kolekce není ze své podstaty procedurou bezpečnou pro přístup z více vláken. Chcete-li zajistit bezpečnost vláken během výčtu, můžete uzamknout kolekci během celého výčtu. Chcete-li více vláknům umožnit přístup ke kolekci pro čtení a zápis, musíte implementovat svou vlastní synchronizaci.

Tato metoda je O(1) operace.

Protože serializace a deserializace enumerátoru pro Hashtable může způsobit změnu pořadí prvků, není možné pokračovat ve výčtu bez volání Reset metody .

Platí pro

Viz také