HybridDictionary.IEnumerable.GetEnumerator Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt einen IEnumerator zurück, der HybridDictionary durchläuft.
virtual System::Collections::IEnumerator ^ System.Collections.IEnumerable.GetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
override this.System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
Function GetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator
Gibt zurück
Ein IEnumerator für das HybridDictionary.
Implementiert
Beispiele
Im folgenden Codebeispiel werden die Elemente eines HybridDictionaryaufgelistet.
#using <System.dll>
using namespace System;
using namespace System::Collections;
using namespace System::Collections::Specialized;
void PrintKeysAndValues1( IDictionary^ myCol );
void PrintKeysAndValues2( IDictionary^ myCol );
void PrintKeysAndValues3( HybridDictionary^ myCol );
int main()
{
// Creates and initializes a new HybridDictionary.
HybridDictionary^ myCol = gcnew HybridDictionary;
myCol->Add( "Braeburn Apples", "1.49" );
myCol->Add( "Fuji Apples", "1.29" );
myCol->Add( "Gala Apples", "1.49" );
myCol->Add( "Golden Delicious Apples", "1.29" );
myCol->Add( "Granny Smith Apples", "0.89" );
myCol->Add( "Red Delicious Apples", "0.99" );
myCol->Add( "Plantain Bananas", "1.49" );
myCol->Add( "Yellow Bananas", "0.79" );
myCol->Add( "Strawberries", "3.33" );
myCol->Add( "Cranberries", "5.98" );
myCol->Add( "Navel Oranges", "1.29" );
myCol->Add( "Grapes", "1.99" );
myCol->Add( "Honeydew Melon", "0.59" );
myCol->Add( "Seedless Watermelon", "0.49" );
myCol->Add( "Pineapple", "1.49" );
myCol->Add( "Nectarine", "1.99" );
myCol->Add( "Plums", "1.69" );
myCol->Add( "Peaches", "1.99" );
// Display the contents of the collection using for each. This is the preferred method.
Console::WriteLine( "Displays the elements using for each:" );
PrintKeysAndValues1( myCol );
// Display the contents of the collection using the enumerator.
Console::WriteLine( "Displays the elements using the IDictionaryEnumerator:" );
PrintKeysAndValues2( myCol );
// Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console::WriteLine( "Displays the elements using the Keys, Values, Count, and Item properties:" );
PrintKeysAndValues3( myCol );
}
// Uses the foreach statement which hides the complexity of the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
void PrintKeysAndValues1( IDictionary^ myCol ) {
Console::WriteLine( " KEY VALUE" );
for each ( DictionaryEntry^ de in myCol )
Console::WriteLine( " {0,-25} {1}", de->Key, de->Value );
Console::WriteLine();
}
// Uses the enumerator.
void PrintKeysAndValues2( IDictionary^ myCol )
{
IDictionaryEnumerator^ myEnumerator = myCol->GetEnumerator();
Console::WriteLine( " KEY VALUE" );
while ( myEnumerator->MoveNext() )
Console::WriteLine( " {0,-25} {1}", myEnumerator->Key, myEnumerator->Value );
Console::WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
void PrintKeysAndValues3( HybridDictionary^ myCol )
{
array<String^>^myKeys = gcnew array<String^>(myCol->Count);
myCol->Keys->CopyTo( myKeys, 0 );
Console::WriteLine( " INDEX KEY VALUE" );
for ( int i = 0; i < myCol->Count; i++ )
Console::WriteLine( " {0,-5} {1,-25} {2}", i, myKeys[ i ], myCol[ myKeys[ i ] ] );
Console::WriteLine();
}
/*
This code produces output similar to the following:
Displays the elements using for each:
KEY VALUE
Seedless Watermelon 0.49
Nectarine 1.99
Cranberries 5.98
Plantain Bananas 1.49
Honeydew Melon 0.59
Pineapple 1.49
Strawberries 3.33
Grapes 1.99
Braeburn Apples 1.49
Peaches 1.99
Red Delicious Apples 0.99
Golden Delicious Apples 1.29
Yellow Bananas 0.79
Granny Smith Apples 0.89
Gala Apples 1.49
Plums 1.69
Navel Oranges 1.29
Fuji Apples 1.29
Displays the elements using the IDictionaryEnumerator:
KEY VALUE
Seedless Watermelon 0.49
Nectarine 1.99
Cranberries 5.98
Plantain Bananas 1.49
Honeydew Melon 0.59
Pineapple 1.49
Strawberries 3.33
Grapes 1.99
Braeburn Apples 1.49
Peaches 1.99
Red Delicious Apples 0.99
Golden Delicious Apples 1.29
Yellow Bananas 0.79
Granny Smith Apples 0.89
Gala Apples 1.49
Plums 1.69
Navel Oranges 1.29
Fuji Apples 1.29
Displays the elements using the Keys, Values, Count, and Item properties:
INDEX KEY VALUE
0 Seedless Watermelon 0.49
1 Nectarine 1.99
2 Cranberries 5.98
3 Plantain Bananas 1.49
4 Honeydew Melon 0.59
5 Pineapple 1.49
6 Strawberries 3.33
7 Grapes 1.99
8 Braeburn Apples 1.49
9 Peaches 1.99
10 Red Delicious Apples 0.99
11 Golden Delicious Apples 1.29
12 Yellow Bananas 0.79
13 Granny Smith Apples 0.89
14 Gala Apples 1.49
15 Plums 1.69
16 Navel Oranges 1.29
17 Fuji Apples 1.29
*/
using System;
using System.Collections;
using System.Collections.Specialized;
public class SamplesHybridDictionary {
public static void Main() {
// Creates and initializes a new HybridDictionary.
HybridDictionary myCol = new HybridDictionary();
myCol.Add( "Braeburn Apples", "1.49" );
myCol.Add( "Fuji Apples", "1.29" );
myCol.Add( "Gala Apples", "1.49" );
myCol.Add( "Golden Delicious Apples", "1.29" );
myCol.Add( "Granny Smith Apples", "0.89" );
myCol.Add( "Red Delicious Apples", "0.99" );
myCol.Add( "Plantain Bananas", "1.49" );
myCol.Add( "Yellow Bananas", "0.79" );
myCol.Add( "Strawberries", "3.33" );
myCol.Add( "Cranberries", "5.98" );
myCol.Add( "Navel Oranges", "1.29" );
myCol.Add( "Grapes", "1.99" );
myCol.Add( "Honeydew Melon", "0.59" );
myCol.Add( "Seedless Watermelon", "0.49" );
myCol.Add( "Pineapple", "1.49" );
myCol.Add( "Nectarine", "1.99" );
myCol.Add( "Plums", "1.69" );
myCol.Add( "Peaches", "1.99" );
// Display the contents of the collection using foreach. This is the preferred method.
Console.WriteLine( "Displays the elements using foreach:" );
PrintKeysAndValues1( myCol );
// Display the contents of the collection using the enumerator.
Console.WriteLine( "Displays the elements using the IDictionaryEnumerator:" );
PrintKeysAndValues2( myCol );
// Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine( "Displays the elements using the Keys, Values, Count, and Item properties:" );
PrintKeysAndValues3( myCol );
}
// Uses the foreach statement which hides the complexity of the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues1( IDictionary myCol ) {
Console.WriteLine( " KEY VALUE" );
foreach ( DictionaryEntry de in myCol )
Console.WriteLine( " {0,-25} {1}", de.Key, de.Value );
Console.WriteLine();
}
// Uses the enumerator.
// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.
public static void PrintKeysAndValues2( IDictionary myCol ) {
IDictionaryEnumerator myEnumerator = myCol.GetEnumerator();
Console.WriteLine( " KEY VALUE" );
while ( myEnumerator.MoveNext() )
Console.WriteLine( " {0,-25} {1}", myEnumerator.Key, myEnumerator.Value );
Console.WriteLine();
}
// Uses the Keys, Values, Count, and Item properties.
public static void PrintKeysAndValues3( HybridDictionary myCol ) {
String[] myKeys = new String[myCol.Count];
myCol.Keys.CopyTo( myKeys, 0 );
Console.WriteLine( " INDEX KEY VALUE" );
for ( int i = 0; i < myCol.Count; i++ )
Console.WriteLine( " {0,-5} {1,-25} {2}", i, myKeys[i], myCol[myKeys[i]] );
Console.WriteLine();
}
}
/*
This code produces output similar to the following:
Displays the elements using foreach:
KEY VALUE
Seedless Watermelon 0.49
Nectarine 1.99
Cranberries 5.98
Plantain Bananas 1.49
Honeydew Melon 0.59
Pineapple 1.49
Strawberries 3.33
Grapes 1.99
Braeburn Apples 1.49
Peaches 1.99
Red Delicious Apples 0.99
Golden Delicious Apples 1.29
Yellow Bananas 0.79
Granny Smith Apples 0.89
Gala Apples 1.49
Plums 1.69
Navel Oranges 1.29
Fuji Apples 1.29
Displays the elements using the IDictionaryEnumerator:
KEY VALUE
Seedless Watermelon 0.49
Nectarine 1.99
Cranberries 5.98
Plantain Bananas 1.49
Honeydew Melon 0.59
Pineapple 1.49
Strawberries 3.33
Grapes 1.99
Braeburn Apples 1.49
Peaches 1.99
Red Delicious Apples 0.99
Golden Delicious Apples 1.29
Yellow Bananas 0.79
Granny Smith Apples 0.89
Gala Apples 1.49
Plums 1.69
Navel Oranges 1.29
Fuji Apples 1.29
Displays the elements using the Keys, Values, Count, and Item properties:
INDEX KEY VALUE
0 Seedless Watermelon 0.49
1 Nectarine 1.99
2 Cranberries 5.98
3 Plantain Bananas 1.49
4 Honeydew Melon 0.59
5 Pineapple 1.49
6 Strawberries 3.33
7 Grapes 1.99
8 Braeburn Apples 1.49
9 Peaches 1.99
10 Red Delicious Apples 0.99
11 Golden Delicious Apples 1.29
12 Yellow Bananas 0.79
13 Granny Smith Apples 0.89
14 Gala Apples 1.49
15 Plums 1.69
16 Navel Oranges 1.29
17 Fuji Apples 1.29
*/
Imports System.Collections
Imports System.Collections.Specialized
Public Class SamplesHybridDictionary
Public Shared Sub Main()
' Creates and initializes a new HybridDictionary.
Dim myCol As New HybridDictionary()
myCol.Add("Braeburn Apples", "1.49")
myCol.Add("Fuji Apples", "1.29")
myCol.Add("Gala Apples", "1.49")
myCol.Add("Golden Delicious Apples", "1.29")
myCol.Add("Granny Smith Apples", "0.89")
myCol.Add("Red Delicious Apples", "0.99")
myCol.Add("Plantain Bananas", "1.49")
myCol.Add("Yellow Bananas", "0.79")
myCol.Add("Strawberries", "3.33")
myCol.Add("Cranberries", "5.98")
myCol.Add("Navel Oranges", "1.29")
myCol.Add("Grapes", "1.99")
myCol.Add("Honeydew Melon", "0.59")
myCol.Add("Seedless Watermelon", "0.49")
myCol.Add("Pineapple", "1.49")
myCol.Add("Nectarine", "1.99")
myCol.Add("Plums", "1.69")
myCol.Add("Peaches", "1.99")
' Display the contents of the collection using For Each. This is the preferred method.
Console.WriteLine("Displays the elements using For Each:")
PrintKeysAndValues1(myCol)
' Display the contents of the collection using the enumerator.
Console.WriteLine("Displays the elements using the IDictionaryEnumerator:")
PrintKeysAndValues2(myCol)
' Display the contents of the collection using the Keys, Values, Count, and Item properties.
Console.WriteLine("Displays the elements using the Keys, Values, Count, and Item properties:")
PrintKeysAndValues3(myCol)
End Sub
' Uses the For Each statement which hides the complexity of the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues1(myCol As IDictionary)
Console.WriteLine(" KEY VALUE")
Dim de As DictionaryEntry
For Each de In myCol
Console.WriteLine(" {0,-25} {1}", de.Key, de.Value)
Next de
Console.WriteLine()
End Sub
' Uses the enumerator.
' NOTE: The For Each statement is the preferred way of enumerating the contents of a collection.
Public Shared Sub PrintKeysAndValues2(myCol As IDictionary)
Dim myEnumerator As IDictionaryEnumerator = myCol.GetEnumerator()
Console.WriteLine(" KEY VALUE")
While myEnumerator.MoveNext()
Console.WriteLine(" {0,-25} {1}", myEnumerator.Key, myEnumerator.Value)
End While
Console.WriteLine()
End Sub
' Uses the Keys, Values, Count, and Item properties.
Public Shared Sub PrintKeysAndValues3(myCol As HybridDictionary)
Dim myKeys(myCol.Count) As [String]
myCol.Keys.CopyTo(myKeys, 0)
Console.WriteLine(" INDEX KEY VALUE")
Dim i As Integer
For i = 0 To myCol.Count - 1
Console.WriteLine(" {0,-5} {1,-25} {2}", i, myKeys(i), myCol(myKeys(i)))
Next i
Console.WriteLine()
End Sub
End Class
'This code produces output similar to the following:
'
'Displays the elements using For Each:
' KEY VALUE
' Seedless Watermelon 0.49
' Nectarine 1.99
' Cranberries 5.98
' Plantain Bananas 1.49
' Honeydew Melon 0.59
' Pineapple 1.49
' Strawberries 3.33
' Grapes 1.99
' Braeburn Apples 1.49
' Peaches 1.99
' Red Delicious Apples 0.99
' Golden Delicious Apples 1.29
' Yellow Bananas 0.79
' Granny Smith Apples 0.89
' Gala Apples 1.49
' Plums 1.69
' Navel Oranges 1.29
' Fuji Apples 1.29
'
'Displays the elements using the IDictionaryEnumerator:
' KEY VALUE
' Seedless Watermelon 0.49
' Nectarine 1.99
' Cranberries 5.98
' Plantain Bananas 1.49
' Honeydew Melon 0.59
' Pineapple 1.49
' Strawberries 3.33
' Grapes 1.99
' Braeburn Apples 1.49
' Peaches 1.99
' Red Delicious Apples 0.99
' Golden Delicious Apples 1.29
' Yellow Bananas 0.79
' Granny Smith Apples 0.89
' Gala Apples 1.49
' Plums 1.69
' Navel Oranges 1.29
' Fuji Apples 1.29
'
'Displays the elements using the Keys, Values, Count, and Item properties:
' INDEX KEY VALUE
' 0 Seedless Watermelon 0.49
' 1 Nectarine 1.99
' 2 Cranberries 5.98
' 3 Plantain Bananas 1.49
' 4 Honeydew Melon 0.59
' 5 Pineapple 1.49
' 6 Strawberries 3.33
' 7 Grapes 1.99
' 8 Braeburn Apples 1.49
' 9 Peaches 1.99
' 10 Red Delicious Apples 0.99
' 11 Golden Delicious Apples 1.29
' 12 Yellow Bananas 0.79
' 13 Granny Smith Apples 0.89
' 14 Gala Apples 1.49
' 15 Plums 1.69
' 16 Navel Oranges 1.29
' 17 Fuji Apples 1.29
Hinweise
Die foreach
-Anweisung der Programmiersprache C# (for each
in Visual Basic) verbirgt die Komplexität der Enumeratoren. 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. Reset setzt den Enumerator ebenfalls auf diese Position zurück. An dieser Position löst der Aufruf Current eine Ausnahme aus. Daher muss der Enumerator durch einen Aufruf von MoveNext auf das erste Element der Auflistung gesetzt werden, bevor der Wert von Current gelesen werden kann.
Current gibt solange dasselbe Objekt zurück, bis MoveNext oder Reset aufgerufen wird. MoveNext legt Current 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 zurückgegeben MoveNext wurde false
, löst der Aufruf Current eine Ausnahme aus. Um Current 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, Ändern oder Löschen von Elementen, wird der Enumerator unwiederbringlich ungültig, und der nächste Aufruf MoveNext oder Reset löst einen aus InvalidOperationException. Wenn die Auflistung zwischen MoveNext und Currentgeändert wird, Current gibt das Element zurück, auf das sie festgelegt ist, auch wenn der Enumerator bereits ungültig ist.
Der Enumerator hat keinen exklusiven Zugriff auf die Auflistung; daher ist die Enumeration einer Auflistung systembedingt kein threadsicheres Verfahren. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.
Diese Methode ist ein O(1)-Vorgang.