Dictionary(TKey, TValue) : Zuweisung wenn TValue eine Struture

28/08/2008 - 23:04 von alfred.buerger | Report spam
Seit geraumer Zeit versuche ich nun schon, einem einzelnen Struture-
Wert innerhalb einer Dictionary einen Wert zuzuweisen. Es gelingt mir
einfach nicht.

Mit einem Single-Wert (Beispiel 1) gelingt diese Zuweisung
einwandfrei. Bei meinem Test (Beispiel 2) komme ich einfach nicht auf
eine Lösung.

(1) Beispiel mit TValue als Single funktioniert
Dim Test_Single As New Dictionary(of String, Single)
Test_Single.Add(“AB”, 0.01)
Test_Single.Item(“AB”) = 1.00 ‘ funktioniert

(2) Beispiel mit TValue als Struture funktioniert nicht
Struture Element
Public Element1 as Single
Public Elemen2 as Single
….
End Struture
Dim Test_Struture As New Dictionary(of String, Element)
Private Privat_Element as New Element

With Privat_Element
.Element1 = 0.01
.Element2 = 0.02
….
End With
Test_Struture.Add(“AB”, Privat_Element)
Console.Writeline(Test_Struture(“AB”).Element1) ‘ funktioniert
Dim Zahl as Single = Test_Struture(“AB”).Element1 ‘
funktioniert

Test_Struture(“AB”).Element1 = 1.00 ’ funktioniert nicht

Vielen Dank für Eure Hilfe im voraus.
Alfi
 

Lesen sie die antworten

#1 Harald M. Genauck
28/08/2008 - 23:39 | Warnen spam
Hallo Alfi,

Seit geraumer Zeit versuche ich nun schon, einem einzelnen Struture-
Wert innerhalb einer Dictionary einen Wert zuzuweisen. Es gelingt mir
einfach nicht.

Mit einem Single-Wert (Beispiel 1) gelingt diese Zuweisung
einwandfrei. Bei meinem Test (Beispiel 2) komme ich einfach nicht auf
eine Lösung.

(1) Beispiel mit TValue als Single funktioniert
Dim Test_Single As New Dictionary(of String, Single)
Test_Single.Add(“AB”, 0.01)
Test_Single.Item(“AB”) = 1.00 ‘ funktioniert



Das liegt daran, dass eigentlich nicht der Single-Wert im Dictionary
geàndert wird, sondern einfach der neue Wert den alten Wert mit dem
gleichen Key ersetzt.

(2) Beispiel mit TValue als Struture funktioniert nicht
Struture Element
Public Element1 as Single
Public Elemen2 as Single
….
End Struture
Dim Test_Struture As New Dictionary(of String, Element)
Private Privat_Element as New Element

With Privat_Element
.Element1 = 0.01
.Element2 = 0.02
….
End With
Test_Struture.Add(“AB”, Privat_Element)
Console.Writeline(Test_Struture(“AB”).Element1) ‘ funktioniert
Dim Zahl as Single = Test_Struture(“AB”).Element1 ‘
funktioniert

Test_Struture(“AB”).Element1 = 1.00 ’ funktioniert nicht



Eine Struktur ist ein Werttyp, und kein Referenztyp. Das bedeutet, dass
das Dictionary Dir bei der "Herausgabe" des in ihm abgelegten Wertes
eine Kopie der Struktur liefert. In der nun "draußen" vor Dir liegenden
Kopie der Struktur kannst Du nun zwar den Wert àndern - was aber nichts
an der nach wie vor im Dictionary liegenden Struktur àndert.

Abhilfemöglichkeit 1:

Du speicherst nach dem Ändern eines Wertes der Struktur diese im ganzen
wieder unter dem Key im Dictionary - àhnlich wie bei dem Single-Wert:

Privat_Element = Test_Struture(“AB”)
Privat_Element.Element1 = 1.00
Test_Struture(“AB”) = Privat_Element

Abhilfemöglichkeit 2:

Statt einer Struktur eine Klasse verwenden.


Viele Grüße

Harald M. Genauck

"VISUAL STUDIO one" - http://www.visualstudio1.de (Chefredakteur)
"ABOUT Visual Basic" - http://www.aboutvb.de (Herausgeber)

Ähnliche fragen