List of () mittels For schleife durchlaufen und dabei erweitern.

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    List of () mittels For schleife durchlaufen und dabei erweitern.

    Hallo zusammen,

    ich würde gerne eine List (of String) mit mehreren Einträgen durchlaufen.
    während die Liste durchgegangen wird, kann es aber passieren, das weitere Einträge zu der Liste hinzugefügt werden.
    Wie kann ich es realisieren, das die neu hinzugefügten Eintrag mit durchlaufen werden. Und das ich keine Fehlermeldung bekomme.

    ich habe folgendes Versucht:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim Liste1 as new list (of String)
    2. sub schleife()
    3. for each element in Liste1
    4. '....
    5. next
    6. end sub
    7. ' Wird ausgeführt während die Schleife durchlaufen wird
    8. sub Hinzufügen()
    9. Liste1.add("Neuer Eintrag")
    10. end sub


    Dabei bekomme ich immer eine Ausnahme.

    Dann habe ich es auf folgendem Weg versucht:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim Liste1 as new list (of String)
    2. sub schleife()
    3. for i = 0 to Liste1.Count - 1
    4. '....
    5. next
    6. end sub
    7. ' Wird ausgeführt während die Schleife durchlaufen wird
    8. sub Hinzufügen()
    9. Liste1.add("Neuer Eintrag")
    10. end sub


    Hier kam keine Fehlermeldung, lediglich die neu hinzugefügten Einträge werden in der Schleife nicht durchlaufen.

    Kann mir jemand helfen?

    Viele Grüße

    demmy schrieb:

    das weitere Einträge zu der Liste hinzugefügt werden.
    Dann musst Du die Schleife verlasasen und neu starten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey,

    ich denke, es ist nicht möglich. Mit ForEach kennst Du ja das Ergebnis => Exception.

    Läufst Du per Index die Liste durch, so musst Du wissen, was im Grunde passiert. Die For-Schleife wird in Etwa so in IL übersetzt: (Das ist die VB-Aufbereitung der IL)



    Wie Du sehen kannst, wird der UpperBound der Liste in eine Variable übergeben und es wird im Anschluss nur noch mit diesem Wert gearbeitet. Somit kann sich die Schleife nicht anpassen. Du solltest ohnehin darauf achten, dass nur 1 gleichzeitiger Zugriff auf die Liste erfolgt. Ich würde das sogar erzwingen. Siehe SyncLock und Konsorten.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Mhh das problem, welches ich habe, ich muss über eine Schnittstelle Befehle in Form von Strings herausschicken.
    Die Schnittstelle, kann aber immer nur einen Befehl nacheinander Senden, das Senden dauert auch ein paar ms.
    Es gibt auch keinen Ausgangspuffer oder so.
    Es kann aber sein, das sich viele Befehle nacheinander "aufstauen", und diese dann nacheinander rausgeschickt werden müssen.

    Wie soll ich das sonst lösen als mit einer List (of string) die dynamisch gefüllt wird und dann geleert wird, um keinen Befehl zwischenzeitlich zu verlieren!?
    Was ich damit sagen will ist, ist der sendevorgang angestoßen und es würde in der zwischenzeit ein zweiter sendebefehlt rausgehen müssen, dann würde das nicht funktionieren, weil ich nur einen nacheinander schicken kann. bzw. der letzte müsste verloren gehn.
    Ich hab das nun mal sehr vereinfacht versucht zu erklären.
    @demmy:: Hänge neue Befehle einfach hinten dran.
    Abgeargeitete Befehle lösche oder move sie ins Log.
    Dann musst Du zum Abarbeiten einfach das Element mit Index 0 auswählen, bearbeiten und löschen / moven.
    Wenn die Liste leer ist, gehst Du Kaffee trinken.
    Feddich. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Euch ist aber schon allen klar, dass ich eine Lösung bereits in Post zwei vorgestellt habe, oder?
    Bei der For-Schleife wird der Ziel-Index halt schon bei Beginn der Schleife festgelegt. Deshalb hab ich mit der Do-Schleife eine For-Schleife nachgebaut, die bei jedem Durchgang den Ziel-Index neu festlegt.