Benötige Hilfe bei dem Erstellen einer Liste

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von 2GradUnterNull.

    Benötige Hilfe bei dem Erstellen einer Liste

    Hallo!
    Ich habe folgendes Problem:

    Ich möchte eine Liste mit jeweils drei Einträgen erstellen. (String, String, Boolean). Dazu habe ich bereits eine Klasse geschreiben, die so weit funktioniert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Module ModuleBasicCommand
    2. Dim _Command As String
    3. Dim _Value As String
    4. Dim _isLocked As Boolean
    5. Public Class clsBasicCommand
    6. Public Sub New(ByVal command As String, ByVal value As String, ByVal Optional isLocked As Boolean = False)
    7. _Command = command
    8. _Value = value
    9. _isLocked = isLocked
    10. End Sub
    11. Public Property Command As String
    12. Get
    13. Return _Command
    14. End Get
    15. Set(value As String)
    16. 'Nothing
    17. End Set
    18. End Property
    19. Public Property Value As String
    20. Get
    21. Return _Value
    22. End Get
    23. Set(value As String)
    24. 'Nothing
    25. End Set
    26. End Property
    27. Public Property Islocked As Boolean
    28. Get
    29. Return _isLocked
    30. End Get
    31. Set(value As Boolean)
    32. 'Nothing
    33. End Set
    34. End Property
    35. End Class
    36. End Module




    Jedoch scheine ich bei dem Hinzufügen von Einträgen in die Liste etwas falsch zu machen. Als Test versuche ich zwei Einträge zu machen.
    Allerdings wird zwei mal der letzte Eintrag zur Liste hinzugefügt (Anstelle von beiden ein mal, wie es sein sollte) . Was mache ich falsch?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim BasicCommandList As List(Of ModuleBasicCommand.clsBasicCommand) = New List(Of ModuleBasicCommand.clsBasicCommand) From
    2. {
    3. New clsBasicCommand("!ping", "Pong", False),
    4. New clsBasicCommand("!hello", "World", False)
    5. }


    Die EInträge überprüfe ich mit einer einfachen Messagebox.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. MsgBox(BasicCommandList.Item(0).Command & " " & BasicCommandList.Item(0).Value)


    Vielen Dank!
    @2GradUnterNull Willkommen im Forum. :thumbup:
    Wenn Du die Properties Deiner Liste als ReadOnly deklarierst, kannst Du den eh leeren Setter rausnehmen.
    Warum machst Du es nicht so:

    VB.NET-Quellcode

    1. BasicCommandList.Add(New clsBasicCommand("!ping", "Pong", False))
    2. BasicCommandList.Add(New clsBasicCommand("!hello", "World", False))
    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!
    Willkommen im Forum.
    Wozu hast Du die Klasse? Du änderst ja doch nur die Variablen des Moduls. Und das sind effektiv globale Variablen. Du erstellst eine Klasseninstanz und setzt dabei die globalen Variablen auf !ping, Pong und false. Dann erstellst Du nochmal eine Klasseninstanz. Und wieder werden im Klassenkonstruktor nur die globalen Variablen geändert. Also von !ping auf hello, Pong auf World. So what? Schmeiß den Modulrumpf weg und befördere die Variablen in die Klasse. Das war's. Denn: ja, eine Klasse muss nicht in ein Modul. Effektiv werden es dann 10 Codezeilen Deiner Klassendeklaration, um das zu bekommen, was Du anstrebst. Warum nur 10: Sobald Du den Hinweis von Rod umgesetzt hast, werden die Variablen _Command, _value und _islocked überflüssig.

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden, damit Du den Hinweis von EaranMaleasi bzgl MsgBox/MessageBox auch dauerhaft zukünftig quasi automatisch umsetzen kannst.
    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.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()