SortedDictionary<TKey,TValue>.IDictionary.GetEnumerator Metoda

Definice

IDictionaryEnumerator Vrátí hodnotu pro IDictionary.

 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

Návraty

IDictionaryEnumerator

A IDictionaryEnumerator for the IDictionary.

Implementuje

Příklady

Následující příklad kódu ukazuje, jak vytvořit výčet párů klíč/hodnota ve slovníku pomocí foreach příkazu (For Eachv Visual Basicfor each, v jazyce C++), který skryje použití enumerátoru. Všimněte si zejména, že enumerátor rozhraní System.Collections.IDictionary vrací DictionaryEntry objekty místo KeyValuePair<TKey,TValue> objektů.

Příklad kódu je součástí většího příkladu, včetně výstupu, poskytnutého pro metodu IDictionary.Add .

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

public class Example
{
    public static void Main()
    {
        // Create a new sorted dictionary of strings, with string keys,
        // and access it using the IDictionary interface.
        //
        IDictionary openWith = new SortedDictionary<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 sorted dictionary of strings, with string keys,
        ' and access it using the IDictionary interface.
        '
        Dim openWith As IDictionary = _
            New SortedDictionary(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

Poznámky

Pro účely výčtu je každá položka strukturou DictionaryEntry .

Příkaz foreach jazyka C# (for eachv jazyce C++, For Each v Visual Basic) skryje složitost výčtů. Proto se doporučuje použít foreach místo přímé manipulace s výčtem.

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

Enumerátor je zpočátku umístěn před prvním prvkem v kolekci. Metoda Reset také vrátí výčet zpět na tuto pozici. V této pozici Entry není definován. Proto je nutné volat metodu MoveNext pro přechod výčtu na první prvek kolekce před přečtením hodnoty .Entry

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

Pokud MoveNext předá konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí false. Pokud je výčet na této pozici, následné volání, která se MoveNext mají vrátit falsetaké . Pokud se vrátí poslední volání MoveNext false, Entry není definováno. Chcete-li nastavit Entry na první prvek kolekce znovu, můžete volat Reset následovaný MoveNext.

Enumerátor zůstane platný, dokud kolekce zůstane beze změny. Pokud jsou v kolekci provedeny změny, například přidávání, úpravy nebo odstraňování prvků, enumerátor je nenákladně neplatný a další volání MoveNext nebo Reset vyvolá InvalidOperationExceptionchybu .

Enumerátor nemá výhradní přístup k kolekci; výčtem kolekce tedy není vnitřně bezpečný postup pro vlákno. Pokud chcete zajistit bezpečnost vláken během výčtu, můžete kolekci uzamknout 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.

Výchozí implementace kolekcí v System.Collections.Generic oboru názvů se nesynchronují.

Tato metoda je operace O(log n), kde n je počet prvků v kolekci.

Platí pro

Viz také