Remove List (of T)

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Mr_Tode.

    Remove List (of T)

    So da ja angeblich jeder hier den Code benötigt um zu helfen:
    Public Class Klasse


    Private _Schuelerliste As List(Of Schueler)
    Private _Lehrer As Lehrer
    Private _Name As String

    Public Event Schueler_Changed()

    Public Sub AddSchueler(ByVal vorname As String, ByVal alter As Integer)
    If Not vorname = "" Then
    Dim gefunden As Boolean = False
    If Schueler Is Nothing Then
    Schueler = New List(Of Schueler)

    End If
    For Each wert As Schueler In _Schuelerliste
    If wert.Vorname = vorname Then
    wert.Alter = alter
    gefunden = True

    End If
    Next
    If Not gefunden Then
    Dim Schueler1 As New Schueler(vorname, alter)
    Schueler.Add(Schueler1)
    End If
    RaiseEvent Schueler_Changed()
    End If
    End Sub

    Public Sub RemoveSchueler()

    !------> Hier soll <---------!
    !------> ein Schuler aus List(of T)<---------!
    !------> gelöscht werden <---------!
    End Sub







    Public Property Schueler() As List(Of Schueler)
    Get
    Return _Schuelerliste
    End Get
    Set(ByVal value As List(Of Schueler))
    _Schuelerliste = value
    End Set
    End Property

    Public Property Lehrer() As Lehrer
    Get
    Return _Lehrer
    End Get
    Set(ByVal value As Lehrer)
    _Lehrer = value
    End Set
    End Property

    Public Property Name() As String
    Get
    Return _Name
    End Get
    Set(ByVal value As String)
    _Name = value
    End Set
    End Property

    Public Sub New(ByVal name As String)
    Me.Name = name
    Schueler = New List(Of Schueler)
    Lehrer = New Lehrer()
    End Sub


    End Class

    Mr_Tode schrieb:

    So da ja angeblich jeder hier den Code benötigt um zu helfen:
    1. gibt es noch den [VB]-Tag und
    2. Wie ist Schueler definiert?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich möchte einen Schueler über einen Button aus einer List of T löschen!

    Schueler.vb:
    ----------->

    VB.NET-Quellcode

    1. Public Class Schueler
    2. Private _vname As String
    3. Private _Alter As Integer
    4. Public Property Vorname() As String
    5. Get
    6. Return _vname
    7. End Get
    8. Set(ByVal value As String)
    9. _vname = value
    10. End Set
    11. End Property
    12. Public Property Alter() As Integer
    13. Get
    14. Return _Alter
    15. End Get
    16. Set(ByVal value As Integer)
    17. _Alter = value
    18. End Set
    19. End Property
    20. Public Sub New()
    21. End Sub
    22. Public Sub New(ByVal name As String, ByVal alter As Integer)
    23. Me.Alter = alter
    24. Me.Vorname = name
    25. End Sub
    26. End Class
    Sieh Dir mal das an:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Class Schueler
    3. Public _name As String
    4. Public Sub New(ByVal name As String)
    5. _name = name
    6. End Sub
    7. Public Overloads Function ToString() As String
    8. Return _name
    9. End Function
    10. End Class
    11. Private _Schuelerliste As New List(Of Schueler)
    12. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    13. _Schuelerliste.Add(New Schueler("Fritz"))
    14. _Schuelerliste.Add(New Schueler("Heinz"))
    15. _Schuelerliste.Add(New Schueler("Karl"))
    16. End Sub
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. _Schuelerliste.RemoveAt(2)
    19. End Sub
    20. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    21. Remove("Heinz")
    22. End Sub
    23. Private Sub Remove(ByVal name As String)
    24. For Each item In _Schuelerliste
    25. If item.ToString = name Then
    26. _Schuelerliste.Remove(item)
    27. Exit For
    28. End If
    29. Next
    30. End Sub
    31. End Class
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    Mr_Tode schrieb:

    Was muss ich für item setzen
    Das wird doch explizit in der Schleife

    VB.NET-Quellcode

    1. For Each item In _Schuelerliste
    gesetzt, da werden alle vorhandenen Einträge abgefragt, und wenn der richtige gefunden ist, wird er gelöscht.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich bin jetzt schon ein Stückchen weiter :D Allerdings bin ich wieder stehen geblieben ... Was ist ab Schueler.remove falsch ???


    VB.NET-Quellcode

    1. Public Sub RemoveSchueler(ByVal vorname As String, ByVal alter As Integer)
    2. Dim gefunden As Boolean
    3. For Each wert As Schueler In _Schuelerliste
    4. If wert.Vorname = vorname Then
    5. wert.Alter = alter
    6. gefunden = True
    7. Schueler.Remove()
    8. ' wo ist hier der Fehler ? :-O
    9. End If
    10. Next
    11. End Sub
    Mach das, was man dir sagt?
    Es wurd gesagt:

    VB.NET-Quellcode

    1. Schueler.Remove(item)
    2. Exit For

    Wo findet man das bei dir?
    Jetzt löschst du...nix weil der Aufruf so nicht bekannt ist.
    Dann: mehrere Abfragen in einer If-Anweisung:

    VB.NET-Quellcode

    1. If teil.Property1 = wert AndAlso teil1.Property2 = wert Then

    "gefunden" brauchst du hierbei nicht.
    Was ist "Schueler" von einem Typ? "Class". Und...was ist das? Jo, nicht referenziert undso und überhaupt...
    Warum nutzt du eine "For Each"-Schleife? Richtig, weil du durch alle Items laufen willst.
    Nun hast du da schon das nette "wert As Schueler". Was ist "wert" dann für ein Typ? Richtig, "Schueler".
    Damit kannste dann auch wieder etwas anfangen.
    Lies dir aber bitte die Grundlagen nochmal durch.
    microsoft.com/germany/msdn/akt…005dasentwicklerbuch.mspx
    microsoft.com/germany/msdn/akt…008dasentwicklerbuch.mspx
    Gehe hier nochmal jeden Beitrag durch und verinnerliche, was dir gesagt wurde.
    So und da habe ich die Lösung ! :D Mein Gott ihr macht das immer so kompliziert ... Ich bin neuling ! ;D

    VB.NET-Quellcode

    1. Public Sub RemoveSchueler(ByVal vorname As String, ByVal alter As Integer)
    2. For Each wert As Schueler In _Schuelerliste
    3. If wert.Vorname = vorname Then
    4. Schueler.Remove(wert)
    5. End If
    6. Next
    7. End Sub
    es ist ja echt gut, dass du das ganze nachbauen willst und nicght einfach nur Kopierst.
    Aber versuch es auch zu verstehen, und vor allem sie dir Post 11 genau an, dor hat @Rod dir gezeigt wie die Remove Prozedur aussehen sollte.
    Es geht ja schliesslich darum....
    du durchläufst eine Liste...
    for each whatever (als typ deiner durchsuchten Liste) in Deine Liste
    schau ob whatever.name = dergesuchte ist - hier reicht es den Namen zu suchen, wenn die unique sind
    falls ja... entferne whatever - un da reicht das entfernen von whatever weil ja das ganze element entfernt wird
    und dann hör auf zu suchen