List Of <Class>, vorherige Elemente werden überschrieben

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von Igel.

    Ach jetze. Nun. Ich weiß zwar nicht, was das bringt, wenn Du innerhalb von Cache nicht mit einer Private Function GetIndexByServerID zu Deinem Ergebnis kommst (was ja eigentlich naheliegend und einfach wäre), sondern mit Servers.GetIndexByServerID, aber wenn Du es für notwendig erachtest ...
    Letztenendes müsstest Du den Typ List(Of) erweitern. Dafür kannst Du Extensions verwenden:

    VB.NET-Quellcode

    1. Public Class Cache
    2. Private Servers As New List(Of ServerInfo)
    3. Public Sub Whatever(ID As Integer)
    4. Dim ServerIDinList = Servers.GetServerIndexByID(ID)
    5. MessageBox.Show(ServerIDinList.tostring)
    6. End Sub
    7. End Class
    8. Public Class ServerInfo
    9. Public ReadOnly Property ID As Integer
    10. Public Sub New(ID As Integer)
    11. Me.ID = ID
    12. End Sub
    13. End Class
    14. Public Module Ex
    15. <Runtime.CompilerServices.Extension>
    16. Public Function GetServerIndexByID(List As List(Of ServerInfo), TargetID As Integer) As Integer
    17. For i = 0 To List.Count - 1
    18. If List(i).ID = TargetID Then Return i
    19. Next
    20. Return -1
    21. End Function
    22. End Module

    Wenn das immer noch nicht das ist, was Du anstrebst, dann herrscht wohl ein grundsätzliches Aneinandervorbeireden zwischen uns 8|
    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 1 mal editiert, zuletzt von „VaporiZed“ ()

    Wie wärs mit einer Methode GetServerById? Also nicht den Index holen, sondern gleich den ServerInfo?

    VB.NET-Quellcode

    1. Public Module Ex
    2. '''<Summary>Returnt Nothing, wenn nix findet</Summary>
    3. <Runtime.CompilerServices.Extension>
    4. Public Function GetServerByID(List As List(Of ServerInfo), TargetID As Integer) As ServerInfo
    5. Return List.FirstOrDefault(Function(svi)svi.ID = TargetID)
    6. End Function
    7. End Module
    Ja, das hab ich mir auch schon überlegt, nur brauch ich dann oftmals doch die Infos verschiedener Server, deshalb hab ich die Daten bisher noch alle zusammen gelassen in meiner Cache-Klasse.

    Kannst du mir das erklären?

    ErfinderDesRades schrieb:

    Function(svi)svi.ID = TargetID

    Ich hab das schon öfter gesehen, diese Funktionen haben glaub auch nen bestimmten Namen, aber mir ist hier bisher nicht klar, wie dieser Funktionstyp an sich funktioniert (also für mich geht nicht hervor, woher die Funktion wissen soll, was sie zu tun hat :huh: ).

    thx

    cya Igel
    Stichwort LINQ. Diese (Function(x) x.Foo = Bar) ist ein Filter. Alle Elemente, die diese Filterbedingung erfüllen, kommen für eine weitere Auswertung infrage, alle anderen werden ignoriert.

    Beispiel List.FirstOrDefault(Function(svi)svi.ID = TargetID)
    Heißt soviel wie: Gehe alle Elemente in der List durch und gib das erste Element, welches die ID hat, die gleich TargetID ist. Wenn Du nix passendes findest, dann gib Nothing zurück.

    Beispiel List.First(Function(svi)svi.ID = TargetID)
    Heißt soviel wie: Gehe alle Elemente in der List durch und gib das erste Element, welches die ID hat, die gleich TargetID ist. Wenn Du nix passendes findest, dann wirf ne Exception.

    Beispiel List.Where(Function(svi)svi.ID = TargetID)
    Heißt soviel wie: Gehe alle Elemente in der List durch und gib ne Auflistung aller Elemente wieder, bei denen ID = TargetID ist. Wenn Du nix findest, gib eine leere Auflistung zurück.
    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.