Benutzer mit den meisten Antworten
Object mit mehreren Feldern, wie Dictionary für 2 Werte/Felder

Frage
-
Moin,
Gibt es in Vb.net eine Möglichkeit, ein Objekt zu verwenden, dem ich mehrere Werte zuweisen kann so wie bei einem Dictionary-Objekt mit 2 Werten?
Also bei Dictionary:
dim citiDict As New Dictionary(Of Long, String)
citiDict.add(22,"wert")Ich würde dann gerne sowas anwenden können:
myObj.add(22,"Wert",33.4,"noch ein Wert","Erklärung oder so", usw)gibts das?
(dass ich das mit Class-Variablen machen könnte wäre eine Möglichkeit, aber die müsste ich alle einzeln benenne, oder nicht?)
Vielen Dank!
TH
Antworten
-
Hallo,
grundsätzlich kannst du hier mit Listen bzw. Arrays arbeiten:
Dim list As New List(Of List(Of Object)) Dim subList As New List(Of Object) subList.Add(22) subList.Add("Wert") subList.Add(33.4) subList.Add("noch ein Wert") subList.Add("Erklärung oder so") subList.Add(usw) list.Add(subList)
Du hättest dann also eine Liste von Listen mit Werten. Viel Spaß wirst du damit allerdings nicht haben, da du den Typ der Objekten in den inneren Listen nicht kennst. Das heißt du müsstest mit Option Strict Off arbeiten (auf keinen Fall zu empfehlen) oder aber alles immer wieder in typisierte Objekte casten, was es aufwendig und nicht weniger Fehleranfällig macht.
Meiner Meinung nach solltest du lieber die Zeit investieren und eigene Klassen dafür schreiben, auch wenn du dort alles ordentlich benennen musst. Das ist deutlich besserer Quellcode (d.h. deutlich weniger Fehleranfällig und viel besser wartbar).
Mit Tupeln kannst du das teilweise verbessern:
Dim tuple = New Tuple(Of Integer, String, Double, String, String, Object)(22,"Wert",33.4,"noch ein Wert","Erklärung oder so", usw) 'bzw. so hier:' 'Dim tuple = Tuple.Create(22,"Wert",33.4,"noch ein Wert","Erklärung oder so", usw)
Dann enthalten die Eigenschaften Item1 bis Item* (* ist die Anzahl der Elemente) die Werte. Das löst bereits das Typisierungsproblem, macht es aber auch nicht übersichtlicher.
Soweit ich weiß kannst du mit der neuesten VB.NET Version genauso mit Tupeln arbeiten wie mit C#, da bin ich aber nicht umfassend informiert und die Dokumentation scheint noch sehr dürftig zu sein. Das würde einiges noch mehr vereinfachen. Aber auch da besagen die Guidelines, dass für üffentliche APIs/Schnittstellen lieber richtige Kalssen geschrieben werden sollten.
Viele Grüße, Tom Lambert - MVP, MCC und MSP
Wozu Antworten markieren und Posts bewerten? Klicke hier
Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub- Als Antwort markiert Migration Sucks Sonntag, 19. März 2017 21:12
Alle Antworten
-
Hallo,
grundsätzlich kannst du hier mit Listen bzw. Arrays arbeiten:
Dim list As New List(Of List(Of Object)) Dim subList As New List(Of Object) subList.Add(22) subList.Add("Wert") subList.Add(33.4) subList.Add("noch ein Wert") subList.Add("Erklärung oder so") subList.Add(usw) list.Add(subList)
Du hättest dann also eine Liste von Listen mit Werten. Viel Spaß wirst du damit allerdings nicht haben, da du den Typ der Objekten in den inneren Listen nicht kennst. Das heißt du müsstest mit Option Strict Off arbeiten (auf keinen Fall zu empfehlen) oder aber alles immer wieder in typisierte Objekte casten, was es aufwendig und nicht weniger Fehleranfällig macht.
Meiner Meinung nach solltest du lieber die Zeit investieren und eigene Klassen dafür schreiben, auch wenn du dort alles ordentlich benennen musst. Das ist deutlich besserer Quellcode (d.h. deutlich weniger Fehleranfällig und viel besser wartbar).
Mit Tupeln kannst du das teilweise verbessern:
Dim tuple = New Tuple(Of Integer, String, Double, String, String, Object)(22,"Wert",33.4,"noch ein Wert","Erklärung oder so", usw) 'bzw. so hier:' 'Dim tuple = Tuple.Create(22,"Wert",33.4,"noch ein Wert","Erklärung oder so", usw)
Dann enthalten die Eigenschaften Item1 bis Item* (* ist die Anzahl der Elemente) die Werte. Das löst bereits das Typisierungsproblem, macht es aber auch nicht übersichtlicher.
Soweit ich weiß kannst du mit der neuesten VB.NET Version genauso mit Tupeln arbeiten wie mit C#, da bin ich aber nicht umfassend informiert und die Dokumentation scheint noch sehr dürftig zu sein. Das würde einiges noch mehr vereinfachen. Aber auch da besagen die Guidelines, dass für üffentliche APIs/Schnittstellen lieber richtige Kalssen geschrieben werden sollten.
Viele Grüße, Tom Lambert - MVP, MCC und MSP
Wozu Antworten markieren und Posts bewerten? Klicke hier
Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub- Als Antwort markiert Migration Sucks Sonntag, 19. März 2017 21:12
-
Danke Tom,
Das mit den tuple hab ich mir mal angesehen. Wäre genau das was ich möchte. Allerdings geht das erst ab Framework 4.0, und mit dem kann die sqlite-Version, die ich hab nicht. Hab unlängst einen ganzen Tag damit zugebracht, sqlite für VB2010 Framework 4.0 zum laufen zu bringen, ist mir nicht gelungen. Ist aber ein anderes Thema. Jedenfalls hab ich hierauf momentan keine Lust.Vielen Dank für Deine Hilfe!