SortedList<TKey,TValue>.IDictionary.GetEnumerator Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vrátí hodnotu IDictionaryEnumerator 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
An IDictionaryEnumerator pro IDictionary.
Implementuje
Příklady
Následující příklad kódu ukazuje, jak vytvořit výčet párů klíč/hodnota v seřazený seznam pomocí foreach
příkazu (For Each
v jazyce Visual Basic v for each
jazyce C++), který skrývá použití enumerátoru. Zejména si všimněte, že enumerátor pro System.Collections.IDictionary rozhraní vrací DictionaryEntry objekty, nikoli KeyValuePair<TKey,TValue> objekty.
Příklad kódu je součástí většího příkladu, včetně výstupu, který je k dispozici pro metodu IDictionary.Add .
using System;
using System.Collections;
using System.Collections.Generic;
public class Example
{
public static void Main()
{
// Create a new sorted list of strings, with string keys,
// and access it using the IDictionary interface.
//
IDictionary openWith = new SortedList<string, string>();
// Add some elements to the sorted list. 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 list of strings, with string keys,
' and access it using the IDictionary interface.
'
Dim openWith As IDictionary = _
New sortedList(Of String, String)
' Add some elements to the sorted list. 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 sorted list 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 sorted list 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
Příkaz foreach
jazyka C# (for each
v jazyce C++, For Each
v jazyce Visual Basic) skrývá složitost enumerátorů. Proto se doporučuje používat foreach
místo přímé manipulace s enumerátorem.
Enumerátory lze používat ke čtení dat v kolekci, nikoli však k úpravě zdrojové kolekce.
Zpočátku je enumerátor umístěn před prvním prvkem v kolekci. Reset také vrátí enumerátor zpět do této pozice. Na této pozici Entry není definován. Proto je nutné před čtením hodnoty EntryvolatMoveNext, aby se enumerátor přepojí na první prvek kolekce.
Entry vrátí stejný objekt, dokud není volána nebo MoveNextReset . MoveNext nastaví Entry na další prvek.
Pokud MoveNext přejde na konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí false
. Pokud je enumerátor na této pozici, další volání MoveNext vrátí false
také . Pokud je poslední volání MoveNext vráceno false
, Entry není definováno. Pokud chcete znovu nastavit Entry první prvek kolekce, můžete zavolat Reset a pak MoveNext.
Enumerátor zůstane platný, dokud kolekce zůstane beze změny. Pokud jsou v kolekci provedeny změny, například přidání, úprava nebo odstranění prvků, je výčet nenávratně zneplatněný a další volání MoveNext nebo Reset vyvolá InvalidOperationException.
Enumerátor nemá výhradní přístup ke kolekci. proto výčet prostřednictvím kolekce není vnitřně procedurou bezpečnou pro přístup z více vláken. Abyste zajistili 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 systému System.Collections.Generic se nesynchronují.
Tato metoda je operace O(1).