Dictionary<TKey,TValue>.IDictionary.GetEnumerator Dictionary<TKey,TValue>.IDictionary.GetEnumerator Dictionary<TKey,TValue>.IDictionary.GetEnumerator Method

Définition

Retourne IDictionaryEnumerator pour l'objet IDictionary.Returns an IDictionaryEnumerator for the IDictionary.

 virtual System::Collections::IDictionaryEnumerator ^ System.Collections.IDictionary.GetEnumerator() = System::Collections::IDictionary::GetEnumerator;
System.Collections.IDictionaryEnumerator IDictionary.GetEnumerator ();
Function GetEnumerator () As IDictionaryEnumerator Implements IDictionary.GetEnumerator

Retours

Implémente

Exemples

L’exemple de code suivant montre comment énumérer les paires clé/valeur dans le dictionnaire à l’aide foreach de l'For Each instruction (dans for each Visual Basic C++, dans), qui masque l’utilisation de l’énumérateur.The following code example shows how to enumerate the key/value pairs in the dictionary by using the foreach statement (For Each in Visual Basic, for each in C++), which hides the use of the enumerator. En particulier, Notez que l’énumérateur de l' System.Collections.IDictionary interface retourne DictionaryEntry des objets plutôt KeyValuePair<TKey,TValue> que des objets.In particular, note that the enumerator for the System.Collections.IDictionary interface returns DictionaryEntry objects rather than KeyValuePair<TKey,TValue> objects.

L’exemple de code fait partie d’un exemple plus complet, y compris la sortie IDictionary.Add , fourni pour la méthode.The code example is part of a larger example, including output, provided for the IDictionary.Add method.

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

public class Example
{
    public static void Main()
    {
        // Create a new dictionary of strings, with string keys,
        // and access it using the IDictionary interface.
        //
        IDictionary openWith = new Dictionary<string, string>();

        // Add some elements to the dictionary. There are no 
        // duplicate keys, but some of the values are duplicates.
        // IDictionary.Add throws an exception if incorrect types
        // are supplied for key or value.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");
Imports System
Imports System.Collections
Imports System.Collections.Generic

Public Class Example
    
    Public Shared Sub Main() 

        ' Create a new dictionary of strings, with string keys,
        ' and access it using the IDictionary interface.
        '
        Dim openWith As IDictionary = _
            New Dictionary(Of String, String)
        
        ' Add some elements to the dictionary. There are no 
        ' duplicate keys, but some of the values are duplicates.
        ' IDictionary.Add throws an exception if incorrect types
        ' are supplied for key or value.
        openWith.Add("txt", "notepad.exe")
        openWith.Add("bmp", "paint.exe")
        openWith.Add("dib", "paint.exe")
        openWith.Add("rtf", "wordpad.exe")
// When you use foreach to enumerate dictionary elements
// with the IDictionary interface, the elements are retrieved
// as DictionaryEntry objects instead of KeyValuePair objects.
Console.WriteLine();
foreach( DictionaryEntry de in openWith )
{
    Console.WriteLine("Key = {0}, Value = {1}", 
        de.Key, de.Value);
}
' When you use foreach to enumerate dictionary elements
' with the IDictionary interface, the elements are retrieved
' as DictionaryEntry objects instead of KeyValuePair objects.
Console.WriteLine()
For Each de As DictionaryEntry In openWith
    Console.WriteLine("Key = {0}, Value = {1}", _
        de.Key, de.Value)
Next 
    }
}

    End Sub

End Class

Remarques

À des fins d’énumération, chaque élément DictionaryEntry est une structure.For purposes of enumeration, each item is a DictionaryEntry structure.

L' foreach instruction de la C# for eachlangue( dans C++masque la complexité des énumérateurs. For EachThe foreach statement of the C# language (for each in C++, For Each in Visual Basic) hides the complexity of enumerators. Il est donc recommandé d'utiliser foreach plutôt que de manipuler l'énumérateur directement.Therefore, using foreach is recommended, instead of directly manipulating the enumerator.

Les énumérateurs peuvent être utilisés pour lire les données de la collection, mais ils ne permettent pas de modifier la collection sous-jacente.Enumerators can be used to read the data in the collection, but they cannot be used to modify the underlying collection.

Au départ, l'énumérateur est positionné avant le premier élément de la collection.Initially, the enumerator is positioned before the first element in the collection. La Reset méthode ramène également l’énumérateur à cette position.The Reset method also brings the enumerator back to this position. À cette position, Entry n'est pas défini.At this position, Entry is undefined. Par conséquent, vous devez appeler MoveNext la méthode pour avancer l’énumérateur jusqu’au premier élément de la collection avant de lire la Entryvaleur de.Therefore, you must call the MoveNext method to advance the enumerator to the first element of the collection before reading the value of Entry.

La Entry propriété retourne le même élément jusqu’à ce MoveNext que Reset la méthode ou soit appelée.The Entry property returns the same element until either the MoveNext or Reset method is called. MoveNext affecte l'élément suivant à Entry.MoveNext sets Entry to the next element.

Si MoveNext passe la fin de la collection, l’énumérateur est positionné après le dernier élément de la collection et MoveNext retourne false.If MoveNext passes the end of the collection, the enumerator is positioned after the last element in the collection and MoveNext returns false. Lorsque l’énumérateur se trouve à cette position, les appels MoveNext suivants à falseretournent également.When the enumerator is at this position, subsequent calls to MoveNext also return false. Si le dernier appel à MoveNext Entry retourné falseest non défini.If the last call to MoveNext returned false, Entry is undefined. Pour attribuer une nouvelle fois Entry au premier élément de la collection, vous pouvez appeler Reset suivi de MoveNext.To set Entry to the first element of the collection again, you can call Reset followed by MoveNext.

Un énumérateur est valide tant que la collection demeure inchangée.An enumerator remains valid as long as the collection remains unchanged. 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évocablement invalidé et MoveNext l' Reset appel suivant à InvalidOperationExceptionou lève une exception.If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is irrecoverably invalidated and the next call to MoveNext or Reset throws an InvalidOperationException.

Comme l’énumérateur ne dispose pas d’un accès exclusif à la collection, l’énumération d’une collection n’est pas intrinsèquement une procédure thread-safe.The enumerator does not have exclusive access to the collection; therefore, enumerating through a collection is intrinsically not a thread-safe procedure. Pour garantir la sécurité des threads pendant l'énumération, vous pouvez verrouiller la collection tout au long de cette opération.To guarantee thread safety during enumeration, you can lock the collection during the entire enumeration. Pour permettre à plusieurs threads d’accéder en lecture et en écriture à la collection, vous devez implémenter votre propre synchronisation.To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.

Les implémentations par défaut de collections dans l’espace de noms System.Collections.Generic ne sont pas synchronisées.Default implementations of collections in the System.Collections.Generic namespace are not synchronized.

Cette méthode est une opération O (1).This method is an O(1) operation.

S’applique à

Voir aussi