Imports System.Collections.Generic
Public Class KeyedValuesExpandable(Of T)
Inherits List(Of Dictionary(Of String, T))
''' <summary>Listenindex ggf. erstellen - Member erstellen oder
' aktualisieren</summary>
''' <param name="index">Listenindex (wird ggf. angefügt)</param>
''' <param name="key">Schlüssel (wird ggf. erstellt)</param>
''' <param name="value">zuzuweisender Wert des Schlüssels</param>
Public Function SetKeyValue(ByVal index As Integer, _
key As String, value As T) As Integer
If value Is Nothing Then
Throw New ArgumentException("Fehlender Wert")
End If
If index >= Me.Count Then
Dim dic As New Dictionary(Of String, T)
Me.Add(dic)
index = Me.Count - 1
End If
If Me(index).ContainsKey(key) Then
Me(index)(key) = value
Else
Me(index).Add(key, value)
End If
Return index
End Function
''' <summary>Versuch der Abfrage eines Schlüssels an einem Listenindex</summary>
''' <param name="index">abzufragender Index der Liste</param>
''' <param name="key">abzufragender Schlüssel</param>
''' <param name="value">Wert des Schlüssels (oder Nothing)</param>
''' <returns>Index und Schlüssel vorhanden?</returns>
Public Function TryGetKeyValue(ByVal index As Integer, _
ByVal key As String, ByRef value As T) As _
Boolean
value = Nothing
If index < 0 Or index >= Me.Count Then Return False
If Not Me(index).ContainsKey(key) Then Return False
value = Me(index)(key)
Return True
End Function
End ClassAnwendungsbeispiel:
Dim lstexp As New KeyedValuesExpandable(Of String)
With lstexp
.SetKeyValue(0, "Name", "Max Mustermann")
.SetKeyValue(0, "Telefon", "097-1234-567")
.SetKeyValue(1, "Name", "Hans Mustermann")
.SetKeyValue(1, "Ort", "Musterdorf")
.SetKeyValue(1, "Ort", "Musterhausen") 'Berichtigung
Dim valuetoget As String = ""
For i As Integer = 0 To .Count - 1
If .TryGetKeyValue(i, "Ort", valuetoget) Then
MsgBox("Index " & CStr(i) & ", Schlüssel Ort = " & valuetoget)
Else
MsgBox("Index " & CStr(i) & ", Schlüssel Ort nicht gefunden")
End If
If .TryGetKeyValue(i, "Telefon", valuetoget) Then
MsgBox("Index " & CStr(i) & ", Schlüssel Telefon = " & valuetoget)
Else
MsgBox("Index " & CStr(i) & ", Schlüssel Telefon nicht gefunden")
End If
Next i
End With |