Hashtable.GetEnumerator Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Retourne un itération qui effectue une IDictionaryEnumerator itération dans le 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
Retours
Pour IDictionaryEnumerator le Hashtable.
Implémente
Exemples
L’exemple suivant compare l’utilisation et GetEnumeratorforeach l’énumération du contenu d’un 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*/
Remarques
L’instruction foreach du langage C# (for each dans Visual Basic) masque la complexité des énumérateurs. Par conséquent, l’utilisation foreach est recommandée au lieu de manipuler directement l’énumérateur.
Les énumérateurs peuvent être utilisés pour lire les données de la collection, mais ils ne peuvent pas être utilisés pour modifier la collection sous-jacente.
Initialement, l’énumérateur est positionné avant le premier élément de la collection. Reset ramène également l’énumérateur à cette position. À cette position, Current n’est pas défini. Par conséquent, vous devez appeler MoveNext pour faire avancer l’énumérateur vers le premier élément de la collection avant de lire la valeur de Current.
Currentretourne le même objet jusqu’à ce que l’un ou MoveNext l’autre Reset soit appelé. MoveNext définit Current l’élément suivant.
Si MoveNext elle passe la fin de la collection, l’énumérateur est positionné après le dernier élément de la collection et MoveNext retourne false. Lorsque l’énumérateur se trouve à cette position, les appels suivants retournent MoveNext également false. Si le dernier appel à MoveNext renvoyer false, Current n’est pas défini. Pour définir Current à nouveau le premier élément de la collection, vous pouvez appeler Reset suivi de MoveNext.
Un énumérateur reste valide tant que la collection reste inchangée. Si des modifications sont apportées à la collection, telles que l’ajout, la modification ou la suppression d’éléments, l’énumérateur est irrécupérablement invalidé et son comportement n’est pas défini.
L’énumérateur n’a pas d’accès exclusif à la collection ; par conséquent, l’énumération par le biais d’une collection n’est intrinsèquement pas une procédure thread-safe. Pour garantir la sécurité des threads pendant l’énumération, vous pouvez verrouiller la collection pendant toute l’énumération. Pour permettre à la collection d’accéder à plusieurs threads pour la lecture et l’écriture, vous devez implémenter votre propre synchronisation.
Cette méthode est une O(1) opération.
Étant donné que la sérialisation et la désérialisation d’un énumérateur pour un Hashtable peut entraîner la réorganisation des éléments, il n’est pas possible de continuer l’énumération sans appeler la Reset méthode.