vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Vorschlag zur Verwendung der Framework-Angebote 
Autor: Manfred X
Datum: 02.04.21 11:54

Für typsicheren Code stehen in System.Collections.Generic geeignete
Listen-Klassen zur Verfügung.
Um eine Klasse nach verschiedenen Kriterien vergleichen und
sortieren zu können, ist ein separater Comparer zweckmäßig.
Falls möglich, sollten Sortier-Vergleiche ein eindeutiges Ergebnis
liefern (z.b. hierarchisch)

    Public Class Person
 
        'Properties mit Defaultwerten z.B. um Nothing zu vermeiden
        Public Property Name As String = ""
        Public Property Vorname As String = ""
        Public Property GebDat As Date = DateTime.MinValue
 
        Public Sub New()
            'parameterfreier Konstruktor für Default-Instanz
        End Sub
 
        Public Sub New(ByVal name As String, ByVal vorname As String, ByVal _
          gebdat As Date)
            Me.Name = name
            Me.Vorname = vorname
            Me.GebDat = gebdat
        End Sub
    End Class
 
 
    'Sortierkriterien-Aufzählung
    Public Enum PersonCompareEnum As Integer
        Name
        Vorname
        Geburtsdatum
    End Enum
 
 
    'Parametrisierter Comparer zum (hierarchischen) Vergleichen und Sortieren 
    ' von Personen
    Public Class PersonComparer
        Implements IComparer(Of Person)
 
        Public Property CompareProperty As PersonCompareEnum = _
          PersonCompareEnum.Name
        Public Property CompareOrder As Windows.Forms.SortOrder
 
        Public Function Compare(x As Person, y As Person) As Integer 
            Implements IComparer(Of Person).Compare
 
            Dim c_name, c_vorname, c_geb, c As Integer
 
            'Klassen-Properties einzeln vergleichen
            c_name = x.Name.CompareTo(y.Name)
            c_vorname = x.Vorname.CompareTo(y.Vorname)
            c_geb = x.GebDat.CompareTo(y.GebDat)
 
            'Hierarchischer Vergleich nach CompareProperty
            Select Case CompareProperty
                Case PersonCompareEnum.Name
                    c = getSortOrder(c_name, c_vorname, c_geb)
                Case PersonCompareEnum.Vorname
                    c = getSortOrder(c_vorname, c_name, c_geb)
                Case PersonCompareEnum.Geburtsdatum
                    c = getSortOrder(c_geb, c_name, c_vorname)
                Case Else
                    Throw New NotImplementedException()
            End Select
 
            'Vergleichsrichtung einbeziehen
            If CompareOrder = SortOrder.Descending Then
                c *= -1
            End If
 
            'Vergleichsergebnis
            Return c
        End Function
 
 
        Private Function getSortOrder(a As Integer, b As Integer, c As Integer) _
          As Integer
            'Aus Einzelvergleichen den Gesamtvergleich erstellen
            Dim r As Integer = a
            If r = 0 Then r = b
            If r = 0 Then r = c
            Return r
        End Function
    End Class
 
 
    'Beispiel:
 
    'Eine Zugriffsvariable auf eine Liste von Personen 
    Dim Personen As List(Of Person)
 
    Private Sub Demo()
 
        'Eine Liste erstellen und füllen (Nutzung der Defaultinstanz bei NEW)
        Personen = New List(Of Person)
 
        Personen.Add(New Person With
                     {.Name = "Müller", .Vorname = "Hans",
                     .GebDat = New DateTime(2010, 5, 18)})
 
        Personen.Add(New Person With
                     {.Name = "Schulze", .Vorname = "Gert",
                     .GebDat = New DateTime(1995, 12, 24)})
 
        Personen.Add(New Person With
                     {.Name = "Adam", .Vorname = "Hans",
                     .GebDat = New DateTime(1995, 11, 2)})
 
        Personen.Add(New Person With
                     {.Name = "Adam", .Vorname = "Hans",
                     .GebDat = New DateTime(1995, 11, 4)})
 
        'Die Liste fallend sortieren nach Vorname (incl. Name/Geburt) 
        Personen.Sort(New PersonComparer With
                      {.CompareProperty = PersonCompareEnum.Vorname,
                      .CompareOrder = SortOrder.Descending})
 
        For i As Integer = 0 To Personen.Count - 1
            With Personen(i)
                System.Diagnostics.Debug.WriteLine
                 (.Name & " " & .Vorname & " " & .GebDat.ToString)
            End With
        Next i
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Collections vb 2008586mawu500720.03.21 15:29
Re: Collections vb 2008295dj.tommy20.03.21 16:59
Re: Collections vb 2008288mawu500720.03.21 17:12
Re: Collections vb 2008335mawu500720.03.21 17:23
Re: Collections vb 2008283dj.tommy21.03.21 16:11
Re: Collections vb 2008293mawu500721.03.21 18:03
Re: Collections vb 2008282mawu500721.03.21 21:19
Re: Collections vb 2008275mawu500722.03.21 16:55
Vorschlag zur Verwendung der Framework-Angebote261Manfred X02.04.21 11:54
Re: Vorschlag zur Verwendung der Framework-Angebote264mawu500702.04.21 15:33

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel