In List(of Class) das Objekt mit der ältesten Zeit finden

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

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    In List(of Class) das Objekt mit der ältesten Zeit finden

    Hallo zusammen,

    ich habe eben ein altes Projekt wiedergefunden und geöffnet. Es geht darum, dass ich eine Klasse
    Lampe habe. Diese hat die Eigenschaften ID und Datum_des_letzten_Leuchtmittelaustauschs. In FormMain habe ich eine List(Of Lampe). Um nun die Lampe mit dem ältesten Leuchtmittel zu finden, brauche ich eure Hilfe. Seiner Zeit habe ich es so gelöst, dass ich eine neue Liste erstellte und diese sortiere, und dann den nullten Index hernehme. Geht das anders, vielleicht mit LINQ?

    Danke und einen schönen Abend gewünscht.
    :)

    VB.NET-Quellcode

    1. Private Sub Button_get_oldest_Click(sender As Object, e As EventArgs) Handles Button_get_oldest.Click
    2. Dim sorted_List_of_Lampe_ordered_by_date As List(Of Lampe) = Alle_Lampen.OrderBy(Function(L As Lampe) L.Datum_des_letzten_Leuchtmittelaustauschs).ToList()
    3. MessageBox.Show("Nr. " & sorted_List_of_Lampe_ordered_by_date.First().ID.ToString(Deu) & NewLine & sorted_List_of_Lampe_ordered_by_date.First().Datum_des_letzten_Leuchtmittelaustauschs.ToString("g", Deu),
    4. "Info zum ältesten Leuchtmittel",
    5. MessageBoxButtons.OK,
    6. MessageBoxIcon.Information)
    7. End Sub
    @Bartosz Du implementierst in der Klasse Lampe das Interface IComparable(Of Lampe):

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim ll As New List(Of Lampe)
    3. ll.Add(New Lampe(DateTime.Now.AddDays(1)))
    4. ll.Add(New Lampe(DateTime.Now.AddDays(3)))
    5. ll.Add(New Lampe(DateTime.Now.AddDays(4)))
    6. ll.Add(New Lampe(DateTime.Now.AddDays(2)))
    7. ll.Sort()
    8. End Sub

    VB.NET-Quellcode

    1. Public Class Lampe
    2. Implements IComparable(Of Lampe)
    3. Public Sub New(datum As DateTime)
    4. LastDate = datum
    5. End Sub
    6. Public Property LastDate As DateTime
    7. Public Function CompareTo(other As Lampe) As Integer Implements IComparable(Of Lampe).CompareTo
    8. Return Me.LastDate.CompareTo(other.LastDate)
    9. End Function
    10. Public Overrides Function ToString() As String
    11. Return LastDate.ToString()
    12. End Function
    13. 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).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hätte es fast so wie Du im Startpost gemacht:

    VB.NET-Quellcode

    1. Dim Ziellampe = Alle_Lampen.OrderBy(Function(x) x.Datum_des_letzten_Leuchtmittelaustauschs).First
    2. MessageBox.Show("Nr. " & Ziellampe.ID.ToString(Deu) & NewLine & Ziellampe.Datum_des_letzten_Leuchtmittelaustauschs.ToString("g", Deu), "Info zum ältesten Leuchtmittel", MessageBoxButtons.OK, MessageBoxIcon.Information)
    ggf. automatisch durch den interpolierten-Zeichenfolgen-Vorschlag von Visual Studio noch gekürzt/verschönert.
    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“ ()