Freigeben über


Dictionary<TKey,TValue>.IDictionary.GetEnumerator Methode

Definition

Gibt einen IDictionaryEnumerator für das IDictionaryzurück.

 virtual System::Collections::IDictionaryEnumerator ^ System.Collections.IDictionary.GetEnumerator() = System::Collections::IDictionary::GetEnumerator;
System.Collections.IDictionaryEnumerator IDictionary.GetEnumerator ();
abstract member System.Collections.IDictionary.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.System.Collections.IDictionary.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
Function GetEnumerator () As IDictionaryEnumerator Implements IDictionary.GetEnumerator

Gibt zurück

Ein IDictionaryEnumerator für das IDictionary.

Implementiert

Beispiele

Das folgende Codebeispiel zeigt, wie die Schlüssel-Wert-Paare im Wörterbuch mithilfe der foreach -Anweisung (For Each in Visual Basic in C++) aufgelistet werden, for each die die Verwendung des Enumerators ausblendet. Beachten Sie insbesondere, dass der Enumerator für die Schnittstelle Anstelle von System.Collections.IDictionary Objekten KeyValuePair<TKey,TValue> Objekte zurückgibtDictionaryEntry.

Das Codebeispiel ist Teil eines größeren Beispiels, einschließlich der Ausgabe, die für die IDictionary.Add -Methode bereitgestellt wird.

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.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

Hinweise

Für Zwecke der Enumeration ist jedes Element eine DictionaryEntry Struktur.

Die foreach -Anweisung der C#-Sprache (for each in C++, For Each in Visual Basic) blendet die Komplexität von Enumeratoren aus. Daher empfiehlt es sich, foreach zu verwenden und den Enumerator nicht direkt zu ändern.

Mit Enumeratoren können die Daten in der Auflistung zwar gelesen, jedoch nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden.

Zu Beginn wird der Enumerator vor das erste Element in der Auflistung positioniert. Die Reset Methode bringt auch den Enumerator wieder an diese Position zurück. An dieser Position ist Entry nicht definiert. Daher müssen Sie die MoveNext -Methode aufrufen, um den Enumerator auf das erste Element der Auflistung vor dem Lesen des Werts von Entryzu weiterentwickeln.

Die Entry -Eigenschaft gibt dasselbe Element zurück, bis entweder die MoveNext -Methode oder Reset aufgerufen wird. MoveNext legt Entry auf das nächste Element fest.

Wenn MoveNext das Ende der Auflistung übergibt, wird der Enumerator hinter dem letzten Element in der Auflistung platziert, und MoveNext gibt false zurück. Wenn sich der Enumerator an dieser Position befindet, geben nachfolgende Aufrufe von MoveNext auch false zurück. Wenn der letzte Aufruf MoveNext zurückgegebene false, Entry ist nicht definiert. Um Entry wieder auf das erste Element der Auflistung festzulegen, können Sie Reset gefolgt von MoveNext aufrufen.

Ein Enumerator bleibt gültig, solange die Auflistung unverändert bleibt. Wenn Änderungen an der Auflistung vorgenommen werden, z. B. das Hinzufügen von Elementen oder das Ändern der Kapazität, wird der Enumerator unwiederbringlich ungültig, und der nächste Aufruf MoveNext oder IEnumerator.Reset löst einen aus InvalidOperationException.

Nur .NET Core 3.0 und höher: Die einzigen mutierenden Methoden, die Enumeratoren nicht ungültig machen, sind Remove und Clear.

Der Enumerator hat keinen exklusiven Zugriff auf die Auflistung; daher ist die Enumeration einer Auflistung systembedingt kein threadsicheres Verfahren. Um während der Enumeration Threadsicherheit zu garantieren, können Sie die Auflistung während der gesamten Enumeration sperren. Um den Lese- und Schreibzugriff auf diese Auflistung durch mehrere Threads zuzulassen, müssen Sie eine eigene Synchronisierung implementieren.

Standardimplementierungen der Auflistungen im System.Collections.Generic-Namespace werden nicht synchronisiert.

Diese Methode ist ein O(1)-Vorgang.

Gilt für:

Weitere Informationen