List(Of T): Auf Element/Item X direkt zugreifen

  • VB.NET

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

    List(Of T): Auf Element/Item X direkt zugreifen

    Hallo Gemeinde.

    Mein Programm baut eine List(Of T) mit ca. 1000 Einträgen auf.
    T ist hierbei eine struktur bestehend aus Integern und Strings.
    Ziel: Ich möchte nun gerne diese List Element für Element durchlaufen (nach jedem Klick auf einen Button ein Element weiter).

    Und: Wie greife ich direkt auf Element 536 zu?

    Vielen DANK!
    Nimm ein Array, das ist für dein Vorhaben besser geeignet. Dort kannst du nämlich direkt mit dem Index arbeiten.
    Ginge zwar auch mit der List, indem du Liste(535) machst, aber trotzdem.

    @sonne75: Hab es grad in dem Moment editiert :pinch:
    Nur so als Info: Arrays können mit dem Index beim Arbeiten gelegentlich schneller sein! Der Platz spielt hier eigentlich keine Rolle, da sich das weit hinzieht.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    nein, Array implementiert auch IList(Of T)
    Aber iwie komisch - die IList(Of T) - Member sind nur nach einem DirectCast auf IList(Of T) zugreifbar.

    hingegen an eine IList(Of T)-Variable kannman ein Array zuweisen.

    die IList(Of T)-Member .Add/.Remove etc. werfen allerdings eine Exception.
    Das mit dem Zugriff auf die IList(Of T)-member liegt vmtl. zum Einen an der Abwärtskompatibilität und zum anderen daran, dass IList(Of T) kein IsFixedSize bereitstellt, wie IList. Das erklärt nämlich auch, warum Add und Remove eine Exception werfen und warum die Member überhaupt nicht öffentlich sind.

    Gruß
    ~blaze~
    Man kann sagen: Das ganze Design der Auflistungen ist vermurkst.

    Grund ist, dass MS das Framework bereits veröffentlicht hat, als es noch keine Generica gab. Daher die untypisierten Interfaces IEnumerable, ICollection, IList

    2005 brach eine neue Ära der Programmierung an, und eiglich hätte man den ganzen untypisierten Crap einstampfen müssen.
    Stattdessen hat man gewaltig erweitert, u.a. die typisierten Interfaces IEnumerable(Of T), ICollection(Of T), IList(Of T) geschaffen, und bei den Kern-Auflistungen - v.a. Array und List(Of T) nachgebessert.
    Mit dem Ergebnis, dass diese nun alles doppelt implementieren.
    Gradezu Absurd wirds, wenn man IEnumerable(Of T) selbst implementiert - da muß man nämlich gleichzeitig auch das untypisierte IEnumerable unterstützen, was zu ziemlich komischen Ergebnissen führt.
    Ja, genau. Meist gibt man dann aber in IEnumerable.GetEnumerator() einfach IEnumerable(Of T).GetEnumerator() zurück. Das ComponentModel ist auch so eine untypisierte Geschichte. Allerdings ist auch das mit den In/Out-Generika-Modifikatoren so eine Sache. Hab' ich bisher noch nicht verwendet, aber Vererbung in Generika ist ja lange Zeit nicht möglich gewesen, daher musste man immer kapselnde Klassen oder sowas definieren.

    Gruß
    ~blaze~