List(of T) als Array indizieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von roepke.

    List(of T) als Array indizieren

    Ich stehe gerade auf dem Schlauch.
    Ich hätte gerne das folgende:

    VB.NET-Quellcode

    1. Dim _lst(3) As New List(Of Long)

    damit ich in einer For..Next- Schleife auf die einzelnen _lst(i) zugreifen kann.
    Ich kann _lst ja aber nur als

    VB.NET-Quellcode

    1. Dim _lst As New List(Of Long)

    definieren.
    Gibt es eine Möglichkeit die sich mir gerade nicht erschließt?

    VB.NET-Quellcode

    1. Dim _lst0 As New List(Of Long)
    2. Dim _lst1 As New List(Of Long)
    3. Dim _lst2 As New List(Of Long)
    4. Dim _lst3 As New List(Of Long)

    löst mein Problem nicht, da ich dann nicht mit einer For...Next Schleife durch komme.
    Ich glaube ich muss das noch mal etwas genauer definieren.
    Ich weiß schon wie man mit Listen arbeitet, das habe ich schon zuhauf gemacht.
    Mein Problem ist, dass ich gegenwärtig 4 Listen habe die alle vom Typ Long sind.

    VB.NET-Quellcode

    1. Dim lst_1 As New List(Of Long)
    2. Dim lst_2 As New List(Of Long)
    3. Dim lst_3 As New List(Of Long)
    4. Dim lst_4 As New List(Of Long)

    Diese hätte ich gerne zu einem Array zusammengefasst

    VB.NET-Quellcode

    1. Dim lst(3) As New List(Of Long)

    Und das ist halt das, was nicht funktioniert.

    VB.NET-Quellcode

    1. Dim i(3) As Integer

    hingegen ist natürlich keine Problem. Beim Integer handelt es sich um einen Wertetyp, die Liste hingegen ist ein Verweistyp.
    Wobei der String ja eigentlich auch ein Verweistyp ist, trotzdem kann ich ihn mehrdimensional als

    VB.NET-Quellcode

    1. Dim s(3) As String

    definieren.
    Aber wie mache ich das mit einer List(of T)?
    Ich würde die Listen gerne (@'tragl') z.B. mit einer

    VB.NET-Quellcode

    1. For i as Integer = 0 to 3
    2. For j As Long = 0 To 100
    3. lst(i).Add(j)
    4. Next j
    5. Next i

    füllen, bzw. lesen.Und das geht halt nur, wenn eine Liste

    VB.NET-Quellcode

    1. Dim lst(3) As New List(Of Long)

    deklariert ist. Und an diesem New stört sich VB halt nun mal. Mit

    VB.NET-Quellcode

    1. Dim lst(3) As List(Of Long)
    kann ich dann nicht auf die LIste zugreifen. So geht's also nicht.
    Reicht Dir das?

    VB.NET-Quellcode

    1. Dim lst = {New List(Of Long), New List(Of Long), New List(Of Long), New List(Of Long)}.ToList
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nicht mit zusätzlich Option Infer On. Es sei denn, dass Du es klassenweit deklarieren willst. Aber den Typ anzugeben, sollte Dir nicht schwerfallen. Du weißt ja, was rauskommt, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ja, ich würde gerne klassenweit deklarieren.
    Habe jetzt

    VB.NET-Quellcode

    1. Dim lst As Object = {New List(Of Long ), New List(Of Long ), New List(Of Long ), New List(Of Long )}.ToList

    Wie bekomme ich jetzt einen Wert in die Listen?

    VB.NET-Quellcode

    1. For i as Integer = 0 to 3
    2. For j As Long = 0 To 100
    3. lst(i).Add(j)
    4. Next j
    5. Next i

    führt zu neuen Fehlern.
    Implizit ist lst ja Object, soll aber Daten vom Typ Long explizit aufnehmen.
    Mit casten komme ich hier gerade nicht weiter.
    8| Wieso denn Object?!? Es ist List(Of List(Of Long)), also ein Liste aus List(Of Long)-Elementen.
    Alternativ ohne ToList:

    VB.NET-Quellcode

    1. Dim lst As List(Of Long)() = {New List(Of Long), New List(Of Long), New List(Of Long), New List(Of Long)}
    also ein Array aus List(Of Long)-Elementen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ach, machmal bin ich einfach zu beschränkt. Danke.
    Natürlich hatte ich List(Of Long), hatte aber die () dahinter vergessen.
    Meldung: Der Wert vom Typ "1-dimensionales Array von System.Collections.Generic.List(Of Long)" kann nicht in "System.Collections.Generic.List(Of Long)" konvertiert werden.
    Dann hatte ich die () dran. Gleiche Meldung. Hatte das .ToList am Ende übersehen.
    Mit Object ging's dann halt und ich hab's gar nicht mehr verstanden.