.NET
VB.NET: Werte verschiedener Typen in einem Array unterbringen
Posted on .Heute tauchte mal wieder die Frage auf, wie man das anstellen kann verschiedene Werte z.B.: String und Double in einen einzigen Array zu stecken. Dabei sollte dies möglich einfach zu handhaben sein, wie ein mehrdimensionales Array, bei dem jede Dimension einen anderen Typen hat.
Das geht so natürlich nicht, da ein Array immer nur einen Typ haben kann und alle Elemente dessen haben dann auch diesen einen Typ. Doch dieses Problem lässt sich ganz einfach umgehen, in dem man den Array auf eine eigene Klasse typisiert.
Mit anderen Worten, man schafft sich eine eigene Klasse an, die zwei Properties zur Verfügung stellt die jeweils ein String und einen Double Wert annehmen. Wenn man nun ein einfaches eindimensionales Array von diesem Typ erstellt hat man genau die Problemstellung erfüllt, wie im ersten Absatz beschrieben.
Konkret sieht das so aus, wir erstellen uns eine eigene Klasse die unsere Werte halten soll:
Public Class Wert Private _doubleWert As Double = 0.0 Private _stringWert As String = "" 'Konstruktor Public Sub New(ByVal sWert As String, ByVal dWert As Double) _stringWert = sWert _doubleWert = dWert End Sub Public Property DoubleWert As Double Get Return _doubleWert End Get Set(ByVal value As Double) _doubleWert = value End Set End Property Public Property StringWert As String Get Return _stringWert End Get Set(ByVal value As String) _stringWert = value End Set End Property End ClassWenn man nun einen Array vom Typ dieser Klasse erstellt kann man ganz bequem auf dessen Properties zugreifen:
Private Sub Form1_Load() Handles MyBase.Load 'Nutzung Dim meinArray(5) As Wert meinArray(0) = New Wert("test", 1.5) meinArray(1) = New Wert("hallo", 3.6) 'Ausgabe MessageBox.Show("Array auf Index 1: String: " & meinArray(1).StringWert _ & " - Double: " & meinArray(1).DoubleWert.ToString()) End SubWie man sieht ganz einfach .-)
Weitere Informationen zu Arrays:
http://openbook.galileocomputing.de/vb_net/msvb020017.htm#Rxxmsvb020017282MehrdimensionaleArrays
http://msdn.microsoft.com/de-de/library/wak0wfyt.aspxNachtrag:
Ich wurde von Thomas Baumann in den Kommentaren darauf hingewiesen, dass man das ganze auch mit einem Struct realisieren kann. Dies kann in vielen Fällen sogar auch performanter sein als mit Klassen, da Strukturen auf dem Stack abgelegt werden, und nicht wie Klassen auf dem Heap, was einen großen Geschwindigkeitsschub bedeutet.
Ich habe mich für die Version mit Klassen entschieden, da ich diese noch weiter verarbeite und hier nicht auf Klassen verzichten kann.
Ein Beispiel für eine Umsetzung mit Strukturen findet ihr in dem Kommentar von Thomas.
Weitere Infos zu Unterschieden zwischen Klassen und Strukturen findet ihr hier.
Sebastian Gross
http://www.bigbasti.comSebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.
Author Thomas Baumann
Posted at 11:54 6. Oktober 2010.
Nett 🙂
Aber eine Structure zu verwenden wäre deutlich performanter, als wie hier das mit Klassen zu lösen 😉
Da würde denn auch schon
Structure Werte
StringWert As String
DoubleWert As Double
‚ ggf
Sub New(StringWert As String, DoubleWert As Double)
Me.StringWert = StringWert
Me.DoubleWert = DoubleWert
End Sub
‚ end ggf 😉
End Structure
ausreichen, und der Wert muss nicht ewig hin und her kopiert werden (durch die Properties).
Author admin
Posted at 16:15 9. Oktober 2010.
Hallo Thomas,
danke für dein Kommentar, natürlich hast du recht, man kann das Ganze auch mit einem Structure lösen. Ich habe es nicht getan, da die obige Klasse noch weiterverarbeitet wird und die Properties sind dabei sehr wichtig 😉
Als einfacher Container sind Structures natürlich besser. werde ich im Artikel nachtragen.
Basti