List(of T) initialisieren

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    List(of T) initialisieren

    Hi,

    ich möchte eine Liste vorhalten, in der gültige Commands und deren minimale Abkürzung gespeichert werden.

    So versuche ich das:

    VB.NET-Quellcode

    1. Private Structure LineCommandEntry
    2. Public ValidCmd As String
    3. Public Minlen As Integer
    4. End Structure
    5. Dim ValidLineCommands As New List(Of LineCommandEntry) = {("COLS", 2), ("BNDS", 1)}


    Klar, die Syntax mit der "runden Klammer" hab ich halt mal so versucht - aber die ist nicht gültig.

    Beholfen hab ich mir, indem ich die Initialisierung in die Load Prozedur verlagert habe und das halt mit VB Befehlen mache:

    VB.NET-Quellcode

    1. Dim newLineCommandEntry As New LineCommandEntry
    2. newLineCommandEntry.ValidCmd = "COLS"
    3. newLineCommandEntry.Minlen = 2
    4. ValidLineCommands.Add(newLineCommandEntry)
    5. newLineCommandEntry.ValidCmd = "BNDS"
    6. newLineCommandEntry.Minlen = 1


    Das funktioniert. Aber erstens sieht mir das sehr umständlich aus ... und zweitens hätte ich die Initialisierung aus Gründen der Klarheit lieber im Kopfteil des Codings.

    Geht das ? Und wenn ja wie ?

    LG
    Peter
    Gib deiner Struktur nen Konstruktor und instanziiere dann in den geschweiften Klammern. List<> nimmt IEnumerable im Konstruktor, also könntest du ein Array reingeben.

    C#-Quellcode

    1. List<Point> list = new List<Point>(new Point[] { new Point(0, 0), new Point(9, 0) });
    Vielleicht sowas?

    VB.NET-Quellcode

    1. Private Function InitList() As List(Of LineCommandEntry)
    2. Dim ValidLineCommands As New List(Of LineCommandEntry)
    3. With ValidLineCommands
    4. .Add(New LineCommandEntry("COLS", 2))
    5. .Add(New LineCommandEntry("BNDS", 1))
    6. End With
    7. Return ValidLineCommands
    8. End Function
    9. Private Class LineCommandEntry
    10. Public Sub New(_ValidCmd As String, _MinLen As Int32)
    11. ValidCmd = _ValidCmd
    12. Minlen = _MinLen
    13. End Sub
    14. Public ValidCmd As String
    15. Public Minlen As Integer
    16. End Class

    VB.NET-Quellcode

    1. Dim list = New List(Of LineCommandEntry) From {New LineCommandEntry With {.Minlen = 1, .ValidCmd = "BNDS"}, New LineCommandEntry With {.Minlen = 2, .ValidCmd = "COLS"}}


    Finde ich aber persönlich etwas unübersichtlich.

    EDIT: So vielleicht etwas leserlicher:

    VB.NET-Quellcode

    1. Dim list = New List(Of LineCommandEntry) _
    2. From {
    3. New LineCommandEntry With {.Minlen = 1, .ValidCmd = "BNDS"},
    4. New LineCommandEntry With {.Minlen = 2, .ValidCmd = "COLS"}
    5. }


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Würde aber, wie @Gonger96 bereits erwähnte, einen Konstruktur hinzufügen. Dann ist ganze noch etwas kompakter.

    VB.NET-Quellcode

    1. Private Structure LineCommandEntry
    2. Public ValidCmd As String
    3. Public Minlen As Integer
    4. Public Sub New(validCmd As String, minlen As Integer)
    5. Me.ValidCmd = validCmd
    6. Me.Minlen = minlen
    7. End Sub
    8. End Structure


    VB.NET-Quellcode

    1. Dim list = New List(Of LineCommandEntry) _
    2. From {
    3. New LineCommandEntry("BNDS", 1),
    4. New LineCommandEntry("COLS", 2)
    5. }


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten