Wie foreach-Schleifen arbeiten, die in C#?
Welche Arten von Klassen können foreach
Schleifen?
InformationsquelleAutor der Frage user48616 | 2008-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche Arten von Klassen können foreach
Schleifen?
InformationsquelleAutor der Frage user48616 | 2008-12-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich streng sprechen, alles, was Sie brauchen, um zu verwenden
foreach
ist eine öffentlicheGetEnumerator()
Methode, die etwas zurückgibt, mit einembool MoveNext()
Methode und eine? Current {get;}
Eigenschaft. Jedoch, die meisten gemeinsamen Bedeutung dieses "etwas, das implementiertIEnumerable
/IEnumerable<T>
die eineIEnumerator
/IEnumerator<T>
.Durch Implikation, dieser umfasst alles, was implementiert
ICollection
/ICollection<T>
wie so etwasCollection<T>
List<T>
arrays (T[]
), etc. Also jeder standard - "Sammlung von Daten" wird in der Regel unterstützenforeach
.Beweis für den ersten Punkt, das folgende funktioniert:
Wie funktioniert es?
Einer foreach-Schleife wie
foreach(int i in obj) {...}
irgendwie entspricht:Jedoch gibt es Variationen. Zum Beispiel, es ist der enumerator (tmp) unterstützt
IDisposable
es wird auch benutzt (ähnlich wieusing
).Beachten Sie den Unterschied in der Lage der Erklärung "
int i
" innen (C# 5.0) vs. außerhalb (ab C# 4.0) der Schleife. Es ist wichtig, wenn Siei
in eine anonyme Methode oder lambda-Ausdruck in Ihrem code-block. Aber das ist eine andere Geschichte ;-pInformationsquelleAutor der Antwort Marc Gravell
Vom MSDN:
So, wenn Sie ein array, Sie könnte verwenden Sie die foreach-Anweisung, um die Iteration über das array, etwa so:
Könnten Sie es auch verwenden, um zu Durchlaufen und eine
List<T>
Sammlung, etwa so:InformationsquelleAutor der Antwort George Stocker
Laut dem blog-post Ente Schreibweiseduck-typing verwendet wird.
InformationsquelleAutor der Antwort tuinstoel
Hier ist die Doku: Hauptartikel Mit Arrays Mit Collection-Objekten
Es ist wichtig zu beachten, dass "Die Art der Sammlung-element muss sein Cabrio auf den Bezeichner-Typ". Manchmal kann überprüft werden bei der Kompilierung und erzeugt eine Laufzeit-Ausnahme, wenn die instance-Typ ist nicht übertragbar auf den Typ der Referenz.
Dies erzeugt eine Laufzeit-Ausnahme, wenn es ein nicht-Apple in der Obst, wie eine orange.
Diese sicher filtert die Liste, um nur die Äpfel mit Enumerable.OfType
InformationsquelleAutor der Antwort Amy B
Foreach-Schleife und, wie es durchläuft IEnumerable unter der Haube.
Referenz C# Foreach-Beispiele
InformationsquelleAutor der Antwort MD NASIR FARDOUSH
InformationsquelleAutor der Antwort shahzad
Nützliche Infos zu diesem Thema finden Sie auf MSDN zu. Um die Essenz aus diesem Artikel:
Dem Schlüsselwort "foreach" zählt eine Sammlung, die Ausführung der embedded-Anweisung einmal für jedes element in der Auflistung:
Der compiler übersetzt die foreach-Schleife im obigen Beispiel gezeigt, in etwas ähnliches wie dieses Konstrukt:
InformationsquelleAutor der Antwort r23
können Sie versuchen, diese...
InformationsquelleAutor der Antwort Dedarul