Wie verwende ich List(Of String) richtig?

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Wie verwende ich List(Of String) richtig?

    Hi,
    ich habe diesen Quellcode:

    VB.NET-Quellcode

    1. Dim list As New List(Of String)
    2. <Description("---")> _
    3. <Category("Appearance")> _
    4. <Browsable(True)> _
    5. <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    6. Public Property Items() As List(Of String)
    7. Get
    8. Return list
    9. End Get
    10. Set(ByVal txtValue As List(Of String))
    11. list = txtValue
    12. End Set
    13. End Property

    Wenn ich im String-Auflistungs-Editor aber etwas hinzufügen will, kommt diese Meldung:
    Der Konstruktor für den Typ "System.String" wurde nicht gefunden.

    Weiss einer was das heisst, und wie man es behebt.

    Danke

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Hey Prometheus,
    natürlich könnte man auch ein Array verwenden, jedoch ist eine Liste imho viel bequemer, da es Methoden wie Add() oder AddRange() gibt.
    Außerdem muss man bei einer Liste keine feste Größe festlegen.

    @vb-checker: Probier's mal so:

    VB.NET-Quellcode

    1. Public Class MyClass
    2. Dim strList As List(Of String)
    3. Public Sub New()
    4. strList = New List(Of String)
    5. End Sub
    6. <Description("---")> _
    7. <Category("Appearance")> _
    8. <Browsable(True)> _
    9. <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    10. Public Property Items() As List(Of String)
    11. Get
    12. Return strList
    13. End Get
    14. Set(ByVal txtValue As List(Of String))
    15. strList = txtValue
    16. End Set
    17. End Property
    18. ' ...
    19. End Class

    MfG,
    -haiyyu
    Das Problem ist, du versucht der Liste selber eine Liste hinzuzufügen anstatt einzelne Zeichenketten.
    Beim Set die strList.Add Methode anwenden und beim Get müsstest du schon ein Index mit übergeben. Aber verstehe nicht wieso du für diesen Fall gleich eine Property machst. Die brauchst du nicht, wenn du keine speziellen Abfragen in den Get und Set Methoden machst, also könntest du auch gleich die Items Property der Liste selber benutzen.

    chrixko schrieb:

    Das Problem ist, du versucht der Liste selber eine Liste hinzuzufügen anstatt einzelne Zeichenketten.
    Beim Set die strList.Add Methode anwenden und beim Get müsstest du schon ein Index mit übergeben. Aber verstehe nicht wieso du für diesen Fall gleich eine Property machst. Die brauchst du nicht, wenn du keine speziellen Abfragen in den Get und Set Methoden machst, also könntest du auch gleich die Items Property der Liste selber benutzen.
    Die "speziellen Abfragen" kommen noch. Aber das brauche ich jetzt ja noch nicht.

    Könntest du mal genauer erklären, was ich anders machen soll. Durch ausprobieren hats nämlich nicht geklappt.

    @haiyyu: Bei deinem Code kommt die selbe Fehlermeldung

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Versuchs mal damit:

    VB.NET-Quellcode

    1. Private strList As New List(Of String)
    2. Public Property Item(ByVal Index As String) As String 'Einziges Item
    3. Get
    4. Return strList.Item(Index)
    5. End Get
    6. Set(ByVal value As String)
    7. strList.Item(Index) = value
    8. End Set
    9. End Property
    10. Public Property List() As List(Of String) 'Die Liste selber
    11. Get
    12. Return strList
    13. End Get
    14. Set(ByVal value As List(Of String))
    15. strList = value
    16. End Set
    17. End Property
    Hi,

    wenn ich eine Liste an eine Liste übergeben will, wuerd ich eher die AddRange-Methode verwenden....

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Class1
    3. Dim strList As List(Of String)
    4. Public Sub New()
    5. strList = New List(Of String)
    6. End Sub
    7. <Description("---")> _
    8. <Category("Appearance")> _
    9. <Browsable(True)> _
    10. <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    11. Public Property Items() As List(Of String)
    12. Get
    13. Return strList
    14. End Get
    15. Set(ByVal txtValue As List(Of String))
    16. strList.AddRange(txtValue)
    17. End Set
    18. End Property
    19. ' ...
    20. End Class


    Gruß
    Nongs
    Dann zeig mal wie du den Code von mir verwendest.
    Denn beim hinzufügen musst da dann List.Add() aufrufen und beim abrufen von Items die Item(Index).

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

    Ich schreibe einfach das:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Class1
    3. Dim strList As List(Of String)
    4. Public Sub New()
    5. strList = New List(Of String)
    6. End Sub
    7. <Description("---")> _
    8. <Category("Appearance")> _
    9. <Browsable(True)> _
    10. <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    11. Public Property Items() As List(Of String)
    12. Get
    13. Return strList
    14. End Get
    15. Set(ByVal txtValue As List(Of String))
    16. strList.AddRange(txtValue)
    17. End Set
    18. End Property
    19. ' ...
    20. End Class

    in das Usercontrol und wenn ich es dann ausführe, klicke ich auf Items und wenn ich eins hinzufügen will, kommt die Fehlereldung

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    <Description("---")> _
    <Category("Appearance")> _
    <Browsable(True)> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    Public Property Items() As List(Of String)
    Get
    Return strList
    End Get
    Set(ByVal txtValue As String)
    strList.Add(txtValue)
    End Set
    End Property

    Beim rot unterstrichenen kommt ein Fehler: Der Set-Parameter muss den selben Typ wie die Eigenschaft haben, in der er sich befindet

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Ok, welcher Teil wird denn ausgeführt wenn du auf den "Hinzufügen" Button klickst?
    Da muss die Add-Methode rein.

    Denn wenn du die Property als den Typ List(Of String) deklarierst kannst du auch nur ganze Listen "Getten" und "Setten" und nicht einzelne Items. Für die Items selber bräuchtest du eine Methode die aufgerufen wird die die List.Add Methode aufrufen kann.

    Nongs schrieb:

    Du musst den RückgabeTyp der Property anpassen.... -> As String

    Gruß

    Also so?

    VB.NET-Quellcode

    1. Public Property Items() As String
    2. Get
    3. Return strList
    4. End Get
    5. Set(ByVal txtValue As String)
    6. strList.Add(txtValue)
    7. End Set
    8. End Property

    Dann wird aber das Return strList unterstrichen, weil die Liste nicht in String konvertiert werden kann

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Benutz doch mal die Propertys die ich schon gepostet habe:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Property Item(ByVal Index As String) As String 'Einziges Item
    2. Get
    3. Return strList.Item(Index)
    4. End Get
    5. Set(ByVal value As String)
    6. strList.Item(Index) = value
    7. End Set
    8. End Property
    9. Public Property List() As List(Of String) 'Die Liste selber
    10. Get
    11. Return strList
    12. End Get
    13. Set(ByVal value As List(Of String))
    14. strList = value
    15. End Set
    16. End Property


    Musst nur noch die DesignerAttribute dranhängen.

    Um Items hinzuzufügen müsstest du eine Add Methode aufrufen können.