SortedDictionary<TKey,TValue>.IDictionary.GetEnumerator Metodo

Definizione

 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

Restituisce

IDictionaryEnumerator

IDictionaryEnumerator per l'oggetto IDictionary.

Implementazioni

Esempio

Nell'esempio di codice seguente viene illustrato come enumerare le coppie chiave/valore nel dizionario usando l'istruzione foreach (For Each in Visual Basic, for each in C++), che nasconde l'uso dell'enumeratore. In particolare, si noti che l'enumeratore per l'interfaccia System.Collections.IDictionary restituisce DictionaryEntry oggetti anziché KeyValuePair<TKey,TValue> oggetti.

L'esempio di codice fa parte di un esempio più grande, incluso l'output, fornito per il IDictionary.Add metodo.

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

Commenti

Ai fini dell'enumerazione, ogni elemento è una DictionaryEntry struttura.

L'istruzione foreach del linguaggio C# (for each in C++, For Each in Visual Basic) nasconde la complessità degli enumeratori. Pertanto, si consiglia l'utilizzo di foreach, anziché la modifica diretta dell'enumeratore.

È possibile utilizzare enumeratori per leggere i dati nella raccolta, ma non per modificare la raccolta sottostante.

Inizialmente l'enumeratore è posizionato davanti al primo elemento della raccolta. Il Reset metodo riporta anche l'enumeratore a questa posizione. In questa posizione, la proprietà Entry è indefinita. È pertanto necessario chiamare il metodo per avanzare l'enumeratore MoveNext al primo elemento della raccolta prima di leggere il valore di Entry.

La Entry proprietà restituisce lo stesso oggetto finché non MoveNext viene chiamato o Reset . MoveNext imposta Entry sull'elemento successivo.

Se MoveNext passa la fine della raccolta, l'enumeratore viene posizionato dopo l'ultimo elemento della raccolta e MoveNext restituisce false. Quando l'enumeratore si trova in questa posizione, le chiamate successive per MoveNext restituire falseanche . Se l'ultima chiamata a MoveNext restituita falseè Entry non definita. Per impostare nuovamente la proprietà Entry sul primo elemento della raccolta, è possibile chiamare il metodo Reset seguito da MoveNext.

Un enumeratore rimane valido finché la raccolta rimane invariata. Se le modifiche vengono apportate all'insieme, ad esempio l'aggiunta, la modifica o l'eliminazione di elementi, l'enumeratore viene invalidato in modo irreversibile e la chiamata successiva a MoveNext o Reset genera un InvalidOperationExceptionoggetto .

L'enumeratore non dispone di accesso esclusivo alla raccolta. L'enumerazione di una raccolta non è quindi una procedura thread-safe. Per assicurare la protezione del thread durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione. Per consentire l'accesso alla raccolta in lettura e scrittura da parte di più thread, è necessario implementare la propria sincronizzazione.

Le implementazioni predefinite di raccolte nello spazio dei nomi System.Collections.Generic non sono sincronizzate.

Questo metodo è un'operazione O(log n) in cui n è un numero di elementi in una raccolta.

Si applica a

Vedi anche