Frage

Ich habe meine eigene Klasse Arraylist Implementierung und war überrascht, verlassen, als ich erkannte, dass

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

hat nicht funktioniert. Was ist der Grund-Arrays implementieren IEnumerator nicht in .NET?

Gibt es eine Behelfslösung?

Danke

War es hilfreich?

Lösung

Arrays IEnumerable<T> tun implementieren, aber es wird als Teil der speziellen Kenntnisse getan die CLI für Arrays hat. Dies funktioniert, als wäre es eine explizite Implementierung war (aber nicht: es wird zur Laufzeit durchgeführt). Viele Werkzeuge werden diese Umsetzung nicht zeigen, wird dies in der Erläuterungen Abschnitt der Array Klassenübersicht.

Sie könnten eine insg:

return ((IEnumerable<T>)_array).GetEnumerator();

Beachten Sie, älterer MSDN (pre docs.microsoft.com) Berichterstattung über diese ein paar Mal mit verschiedenen .NET-Versionen geändert, Prüfung für den Bemerkungen Abschnitt.

Andere Tipps

Sie können die generische Methode IEnumerable<T> OfType<T>() verwenden aus System.Linq Namespace, der IEnumerable-Schnittstelle erweitert. Es werden alle Elemente herauszufiltern, welche Art anders als T und Rückkehr IEnumerable<T> collection. Wenn Sie (IEnumerable<T>)_array Konvertierungsoperator verwenden, kann es nicht sicher sein, weil System.Array (und andere nicht-generische Typen) speichert Elemente des Typs System.Object.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top