Hashtable.GetEnumerator Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna um IDictionaryEnumerator que itera pelo 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
Retornos
Um IDictionaryEnumerator para o Hashtable.
Implementações
Exemplos
O exemplo a seguir compara o uso de GetEnumerator e foreach
para enumerar o conteúdo de um 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*/
Comentários
A foreach
instrução da linguagem C# (for each
no Visual Basic) oculta a complexidade dos enumeradores. Portanto, o uso de foreach
é recomendado, em vez de manipular diretamente o enumerador.
Os enumeradores podem ser usados para ler os dados na coleção, mas não podem ser usados para modificar a coleção subjacente.
Inicialmente, o enumerador é posicionado antes do primeiro elemento da coleção. Reset também traz o enumerador de volta para essa posição. Nesta posição, Current está indefinido. Por isso, você deve chamar MoveNext para avançar o enumerador até o primeiro elemento da coleção antes de ler o valor de Current.
Current retorna o mesmo objeto até MoveNext ou Reset ser chamado. MoveNext define Current como o próximo elemento.
Caso MoveNext passe o final da coleção, o enumerador é posicionado após o último elemento na coleção e MoveNext retorna false
. Quando o enumerador está nessa posição, as chamadas subsequentes para MoveNext também retornam false
. Caso a última chamada para MoveNext tenha retornado false
, Current está indefinido. Para definir Current como o primeiro elemento da coleção novamente, é possível chamar Reset seguido de MoveNext.
Um enumerador permanece válido desde que a coleção permaneça inalterada. Se forem feitas alterações na coleção, como adicionar, modificar ou excluir elementos, o enumerador será invalidado de maneira irrevogável e seu comportamento permanecerá indefinido.
O enumerador não tem acesso exclusivo à coleção; portanto, enumerar por meio de uma coleção não é intrinsecamente um procedimento seguro de thread. Para garantir acesso thread-safe durante a enumeração, é possível bloquear a coleção durante toda a enumeração. Para permitir que a coleção seja acessada por vários threads para leitura e gravação, você deve implementar sua própria sincronização.
Esse método é uma O(1)
operação.
Como serializar e desserializar um enumerador para um Hashtable pode fazer com que os elementos sejam reordenados, não é possível continuar a enumeração sem chamar o Reset método.