[EDIT=herbivore]Abgeteilt von foreach-schleife in UML darstellen[EDIT]
Hallo,
letztendlich ist es ja ne for schleife
Nein. Stattdessen wird - wenn du foreach
auf ein IEnumerable
anwendest - "intern" folgendes gemacht:
IEnumerator<Item> enumerator = enumerable.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
Item item = enumerator.Current;
...
}
}
finally
{
if ((enumerator!=null)
enumerator.Dispose();
}
EDIT: Durch Hinweis von SeeQuark etwas korrigiert.
Gruß,
dN!3L
könnte man sich nun streiten was ne while schleife macht 😃
könnte man sich nun streiten was ne while schleife macht 😃
???
Es geht darum, dass bei einem IEnumerable
eben nicht indexiert (wie in der for-Schleife) auf die Elemente zugegriffen wird (und auch nicht kann!), sondern mit MoveNext()
(bis man ans Ende gekommen ist).
Gruß,
dN!3L
woher weißt du denn das du am ende bist?
Guck in den Code, dann siehst du es...! MoveNext()
gibt null
zurück. Von einem IEnumerable
weißt du weder, welchen Index dein Element hat, noch wie viel Elemente überhaupt drin sind.
Gruß,
dN!3L
@itstata: Das ist nicht bei allen IEnumarable
s so. Oder man kann sich nicht immer darauf verlassen.
MoveNext()
gibtnull
zurück
Es gibt false
zurück 😉 Siehe IEnumerator.MoveNext-Methode.
mfg
SeeQuark
aber muss nicht irgendwie festgestellt werden ob das ende erreicht ist?
Wie macht es wohl eine LinkedList<>
? Die stellt keinen Indexer zur Verfügung.
mfg
SeeQuark
Wenn die LinkedList<(Of <(T>)>) leer ist, enthalten die First-Eigenschaft und die Last-Eigenschaft null....
alles klar, ich denke jetzt hab ichs 😃
LinkedList<T>-Klasse (System.Collections.Generic)
ja null weil i==max
Tja, wie lang ist wohl folgende Aufzählung? 😉
public static IEnumerable<string> Test()
{
while (true)
yield return "hahaha";
}
Ernst beiseite: Eben durch z.B. solch yield return
-Sachen weiß man erst, wie lang die Auflistung eigentlich ist, wenn man am Ende angekommen ist.
Gruß,
dN!3L