Benutzer mit den meisten Antworten
Zugriff auf Klassenvariable über Benamung

Frage
-
Hallo Experten,
mit eurer Unterstützung habe ich eine Klassenstruktur aufgebaut, die dem folgendem Muster folgt:
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim xfamilie As New List(Of familie) 'Familie Mustermann erfassen xfamilie.Add(New familie With {.Bezeichnung = "Mustermann"}) 'Familie Mustermann erstellen xfamilie(0).AddPerson("Mustermann", "Hans Uwe") 'Vater xfamilie(0).AddPerson("Mustermann", "Anna") 'Mutter xfamilie(0).AddPerson("Mustermann", "Michael") 'Kind xfamilie(0).Personen(0).AddAuto("BMW", "rot") 'Auto des Vaters xfamilie(0).Personen(1).AddAuto("VW", "gelb") 'Auto der Mutter 'Familie Maier erfassen xfamilie.Add(New familie With {.Bezeichnung = "Maier "}) 'Familie Maier erstellen xfamilie(1).AddPerson("Maier ", "Wolfgang") 'Vater xfamilie(1).AddPerson("Maier ", "Gabi") 'Mutter xfamilie(1).AddPerson("Maier ", "Lucas") 'Kind 1 xfamilie(1).AddPerson("Maier ", "Marie") 'Kind 2 xfamilie(1).Personen(0).AddAuto("Audi", "grün") 'Auto des Vaters End Sub End Class Public Class familie Public Property Bezeichnung As String Public Property Personen As new List(Of Person) Public Sub AddPerson(Name As String, Vorname As String) Personen.Add(New Person With {.Name = Name, .Vorname = Vorname.Split(" ").ToArray.ToList}) End Sub End Class Public Class Person Public Property Name As String Public Property Vorname As new List(Of String) Public Property Typ As String 'zB. Vater Mutter Kind etc Public Property Autos As new List(Of Auto) Public Sub AddAuto(Marke As String, Farbe As String) Autos.Add(New Auto With {.Marke = Marke, .Farbe = Farbe}) End Sub End Class Public Class Auto Public Property Marke As String Public Property Farbe As String End Class
Der Code läuft wie er soll und einwandfrei, aber jetzt meine Frage. Die folgend Code erzeugen eine Ausgabe
Debug.print (xfamilie(0).Person(2).Vorname(0)) 'Ausgabe -> Michael
Debug.print (xfamilie(1).Person(0).Autos(0).Marke) 'Ausgabe -> AudiNun gibt es ja etliche Controls etc im VB, wo nicht über einen Integer-Index zugriffen wird, sondern über einen String-Index:
Debug.print (xfamilie("Mustermann").Person(2).Vorname(0)) 'Ausgabe -> Michael
Debug.print (xfamilie("Maier").Person(0).Autos(0).Marke) 'Ausgabe -> AudiWie muss ich die Klasse anpassen, damit beides geht also xfamilie(index as integer)... und xfamilie(string)... (Natürlich wäre die Bezeichnung "Musterman" und "Maier" eindeutig!!!)
mfg eem monarch
- Bearbeitet Monarch-Falter Donnerstag, 18. Dezember 2014 09:38
Antworten
-
Hi,
so etwas kann man über ein Wörterbuch lösen:Dim familien As New Dictionary(Of String, familie) For Each f In xfamilie familien.Add(f.Personen(0).Name, f) Next MsgBox(familien("Mustermann").Personen(0).Vorname(0))
Du solltest außerdem besser mit Option Strict On arbeiten.
--
Peter
- Bearbeitet Peter Fleischer Donnerstag, 18. Dezember 2014 09:52
- Als Antwort markiert Monarch-Falter Donnerstag, 18. Dezember 2014 13:55
Alle Antworten
-
Hi,
so etwas kann man über ein Wörterbuch lösen:Dim familien As New Dictionary(Of String, familie) For Each f In xfamilie familien.Add(f.Personen(0).Name, f) Next MsgBox(familien("Mustermann").Personen(0).Vorname(0))
Du solltest außerdem besser mit Option Strict On arbeiten.
--
Peter
- Bearbeitet Peter Fleischer Donnerstag, 18. Dezember 2014 09:52
- Als Antwort markiert Monarch-Falter Donnerstag, 18. Dezember 2014 13:55