IEnumerator(T) Schnittstelle
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

IEnumerator<T>-Schnittstelle

 

Unterstützt eine einfache Iteration durch eine generische Auflistung.

Namespace:   System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public interface IEnumerator<out T> : IDisposable, IEnumerator

Typparameter

T

Der Typ der aufzulistenden Objekte.

NameBeschreibung
System_CAPS_pubpropertyCurrent

Ruft das Element in der Auflistung an der aktuellen Position des Enumerators ab.

NameBeschreibung
System_CAPS_pubmethodDispose()

Führt anwendungsspezifische Aufgaben durch, die mit der Freigabe, der Zurückgabe oder dem Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen.(Geerbt von IDisposable.)

System_CAPS_pubmethodMoveNext()

Setzt den Enumerator auf das nächste Element der Auflistung.(Geerbt von IEnumerator.)

System_CAPS_pubmethodReset()

Setzt den Enumerator auf seine anfängliche Position vor dem ersten Element in der Auflistung.(Geerbt von IEnumerator.)

IEnumerator<T>ist die Basisschnittstelle für alle generischen Enumeratoren.

Die foreach -Anweisung in c# (for each in C++ For Each in Visual Basic) verbirgt die Komplexität der Enumeratoren.Daher wird die Verwendung foreach wird empfohlen, anstatt den Enumerator direkt zu bearbeiten.

Enumeratoren können verwendet werden, um die Daten in der Auflistung zu lesen, aber sie können nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden.

Anfänglich wird der Enumerator vor dem ersten Element in der Auflistung.An dieser Position Current ist nicht definiert.Sie müssen daher aufrufen MoveNext um den Enumerator auf das erste Element der Auflistung vor dem Lesen des Werts von Current.

CurrentGibt das gleiche Objekt bis MoveNext aufgerufen wird. MoveNextLegt Current auf das nächste Element.

Wenn MoveNext übergibt, wird am Ende der Auflistung der Enumerator hinter dem letzten Element in der Auflistung positioniert, und MoveNext gibt false.Wann wird der Enumerator an dieser Position nachfolgende Aufrufe von MoveNext auch zurückgeben false.Wenn der letzte Aufruf MoveNext zurückgegebenen false, Current ist nicht definiert.Kann nicht festgelegt werden Current auf das erste Element der Auflistung. Sie müssen stattdessen eine neue Enumeratorinstanz erstellen.

Die Reset -Methode wird für die COM-Interoperabilität bereitgestellt.Es muss nicht unbedingt implementiert werden; Der Implementierer kann stattdessen einfach Auslösen einer NotSupportedException.Jedoch wenn Sie auswählen möchten, stellen Sie sicher keine Aufrufer davon abhängt, dass die Reset Funktionalität.

Ein Enumerator bleibt gültig, solange die Auflistung geändert wird.Wenn an der Auflistung, z. B. durch Hinzufügen Änderungen, ändern oder Löschen von Elementen, der Enumerator unwiederbringlich wird ungültig, und der nächste Aufruf von MoveNext oder Reset löst eine InvalidOperationException.

Der Enumerator keinen exklusiven Zugriff auf die Auflistung; Daher ist die Enumeration einer Auflistung systemintern kein threadsicheres Verfahren.Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie die Auflistung während der gesamten Enumeration sperren.Um die Auflistung von mehreren Threads zum Lesen und Schreiben zugegriffen werden können, müssen Sie eine eigene Synchronisierung implementieren.

Standardimplementierungen der Auflistungen in der System.Collections.Generic Namespace werden nicht synchronisiert.

Hinweise zur Implementierung:

Erfordert die Implementierung dieser Schnittstelle implementieren die nicht generische IEnumerator Schnittstelle.Die MoveNext und Reset Methoden hängen nicht von T, und nur in der nicht generischen Schnittstelle angezeigt.Die Current -Eigenschaft ist in beiden Schnittstellen und verfügt über verschiedene Rückgabetypen.Implementieren Sie die nicht generische IEnumerator.Current -Eigenschaft als explizite Schnittstellenimplementierung.Dadurch wird jeder Consumer der nicht generischen Schnittstelle, die generische Schnittstelle zu nutzen.

Darüber hinaus IEnumerator<T> implementiert IDisposable, erfordert Sie implementieren die Dispose Methode.Dies ermöglicht Ihnen, Datenbankverbindungen zu schließen oder Freigeben von Dateihandles oder ähnlichen Vorgängen, wenn Sie andere Ressourcen verwenden.Wenn keine zusätzlichen Ressourcen freigegeben sind, geben Sie eine leere Dispose Implementierung.

Das folgende Beispiel zeigt eine Implementierung von der IEnumerator<T> -Schnittstelle für eine Auflistungsklasse benutzerdefinierter Objekte.Das benutzerdefinierte Objekt ist eine Instanz des Typs Box, und die Auflistungsklasse ist BoxCollection.Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die ICollection<T> Schnittstelle.


// Defines the enumerator for the Boxes collection.
// (Some prefer this class nested in the collection class.)
public class BoxEnumerator : IEnumerator<Box>
{
    private BoxCollection _collection;
    private int curIndex;
    private Box curBox;


    public BoxEnumerator(BoxCollection collection)
    {
        _collection = collection;
        curIndex = -1;
        curBox = default(Box);

    }

    public bool MoveNext()
    {
        //Avoids going beyond the end of the collection.
        if (++curIndex >= _collection.Count)
        {
            return false;
        }
        else
        {
            // Set current box to next item in collection.
            curBox = _collection[curIndex];
        }
        return true;
    }

    public void Reset() { curIndex = -1; }

    void IDisposable.Dispose() { }

    public Box Current
    {
        get { return curBox; }
    }


    object IEnumerator.Current
    {
        get { return Current; }
    }

}

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 2.0
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen:
© 2016 Microsoft