(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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

out T

Der Typ der aufzulistenden Objekte.

Dieser Typparameter ist Covariant. Das heißt, Sie können entweder den angegebenen Typ oder einen weiter abgeleiteten Typ verwenden. Weitere Informationen zu Ko- und Kontravarianz finden Sie unter Kovarianz und Kontravarianz in Generika.

Der IEnumerator<T>-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche EigenschaftUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCurrentRuft das Element in der Auflistung an der aktuellen Position des Enumerators ab.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDisposeFührt anwendungsspezifische Aufgaben aus, die mit dem Freigeben, Zurückgeben oder Zurücksetzen von nicht verwalteten Ressourcen zusammenhängen. (Von IDisposable geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMoveNextSetzt den Enumerator auf das nächste Element der Auflistung. (Von IEnumerator geerbt.)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsResetSetzt den Enumerator auf seine anfängliche Position vor dem ersten Element in der Auflistung. (Von IEnumerator geerbt.)
Zum Seitenanfang

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 empfiehlt es sich, foreach zu verwenden und den Enumerator nicht direkt zu bearbeiten.

Mit Enumeratoren können die Daten in der Auflistung gelesen werden, sie können jedoch nicht zum Ändern der zugrunde liegenden Auflistung verwendet werden.

Anfänglich wird der Enumerator vor dem ersten Element in der Auflistung positioniert. An dieser Position ist Current nicht definiert. Daher muss der Enumerator durch das Aufrufen von MoveNext auf das erste Element der Auflistung festgelegt werden, bevor der Wert von Current gelesen werden kann.

Current gibt so lange dasselbe Objekt zurück, bis MoveNext aufgerufen wird. MoveNext legt Current auf das nächste Element fest.

Wenn MoveNext das Ende der Auflistung erreicht, wird der Enumerator hinter dem letzten Element in der Auflistung positioniert, und MoveNext gibt false zurück. Wenn sich der Enumerator an dieser Position befindet, geben nachfolgende Aufrufe an die MoveNext-Methode ebenfalls false zurück. Wenn der letzte Aufruf von MoveNextfalse zurückgegeben hat, ist Current nicht definiert. Sie können Current nicht erneut auf das erste Element der Auflistung festlegen, sondern müssen eine neue Enumeratorinstanz erstellen.

Die Reset-Methode wird für die Interoperabilität mit COM bereitgestellt. Sie muss nicht zwingend implementiert werden. Stattdessen kann die gewählte Implementierung auch einfach eine NotSupportedException auslösen.

Ein Enumerator bleibt gültig, solange die Auflistung nicht geändert wird. Wenn Änderungen an der Auflistung vorgenommen werden, z. B. durch Hinzufügen, Ändern oder Löschen von Elementen, wird der Enumerator unwiederbringlich ungültig gemacht, und sein Verhalten ist nicht definiert.

Der Enumerator erhält keinen exklusiven Zugriff auf die Auflistung. Daher stellt die Enumeration einer Auflistung systembedingt keine threadsichere Prozedur dar. Um die Threadsicherheit während der Enumeration zu garantieren, können Sie die Auflistung während der gesamten Enumeration sperren. Damit mehrere Threads zum Lesen und Schreiben auf die Auflistung zugreifen können, müssen Sie Ihre eigene Synchronisierung implementieren.

Standardimplementierungen von Auflistungen im System.Collections.Generic-Namespace werden nicht synchronisiert.

Hinweise zur Implementierung

Zur Implementierung dieser Schnittstelle muss die nicht generische IEnumerator-Schnittstelle implementiert werden. Die MoveNext-Methode und die Reset-Methode hängen nicht von T ab und sind nur in der nicht generischen Schnittstelle enthalten. Die Current-Eigenschaft ist in beiden Schnittstellen enthalten und verfügt über verschiedene Rückgabetypen. Implementieren Sie die nicht generische IEnumerator.Current-Eigenschaft als explizite Schnittstellenimplementierung. Dies ermöglicht es jedem Consumer der nicht generischen Schnittstelle, die generische Schnittstelle zu verwenden.

Im folgenden Beispiel wird eine Implementierung der IEnumerator<T>-Schnittstelle für eine Auflistungsklasse benutzerdefinierter Objekte veranschaulicht. 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; }
    }

}


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft