Warum in .net Sie Arrays nur IEnumerable implementieren und nicht IEnumerable ?
-
03-10-2019 - |
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
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
.