Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VB.Net Zugriff auf Structure innerhalb eines Dictionaries

Frage Entwicklung Visual Studio

Mitglied: ChrFriedel

ChrFriedel (Level 1) - Jetzt verbinden

25.02.2015, aktualisiert 15:32 Uhr, 817 Aufrufe, 6 Kommentare

Hallo zusammen,

ich bin gerade eben über etwas gestolpert von dem ich mal einen Beispielcode verfasst habe:

01.
 
02.
Public Structure SomeStructure 
03.
 
04.
        Dim ID As Integer 
05.
 
06.
End Structure 
07.
 
08.
Private Sub DoSomething() 
09.
 
10.
        Dim Dict As New Dictionary(Of String, SomeStructure) 
11.
        Dim aStructure As New SomeStructure With {.ID = 1} 
12.
        Dict.Add("key", aStructure) 
13.
 
14.
        'Dict("key").ID = 2             'Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden. 
15.
        'Dict.Item("key").ID = 2    'Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden. 
16.
 
17.
        Dim Versuch1 As SomeStructure = Dict("key") 
18.
        Versuch1.ID = 2 
19.
 
20.
        System.Diagnostics.Debug.Print(Dict("key").ID) 'Output 1 
21.
 
22.
        Dim Versuch2 As SomeStructure = Dict("key") 
23.
        Versuch2.ID = 2 
24.
        Dict("key") = Versuch2 
25.
 
26.
        System.Diagnostics.Debug.Print(Dict("key").ID) 'Output 2 
27.
 
28.
End Sub 
29.
 
Zeile 14 und 15 kompilieren nicht mit der angegebenen Fehlermeldung was mich an sich schon sehr verwundert weil IntelliSense bspw. problemlos erkennt das ich gern auf ein Objekt vom Typ SomeStructure zugreifen möchte und mir die vorhandenen Variablen anbietet.

Zeile 17 und 18 funktionieren problemlos führen aber nicht zum Ziel da Versuch1 nur eine Kopie ist

Zeile 22-24 verhalten sich genau wie gewünscht, empfinde ich persönlich aber als unschön und vermute auch performanceverluste hier

Wenn ich aus der Structure eine Class mache funktioniert alles genau wie gewünscht.

Meine Frage ist ob ich Tomaten auf den Augen habe und es mein Fehler ist das vor allem Zeile 14 und 15 nicht funktionieren oder ob es tatsächlich by Design ist. Ich könnte schwören ich habe in früheren Projekten nämlich genau so programmiert. Seltsam

Bonusfrage:
Kann mir jemand einen vernünftigen Grund nennen wieso es hier keine Kategorie .Net oder wenigstens VisualBasic gibt? Dafür aber Kategorien wie KiXtart, Entwicklung:Lizenzierung und ähnlich wichtige Dinge...


Grüße
Mitglied: SlainteMhath
LÖSUNG 25.02.2015, aktualisiert um 15:32 Uhr
Moin,

by Design
Genau das.

Bonusfrage:
Kann mir jemand einen vernünftigen Grund nennen wieso es hier keine Kategorie .Net oder wenigstens VisualBasic gibt? Dafür aber Kategorien wie KiXtart,
Entwicklung:Lizenzierung und ähnlich wichtige Dinge...
Das liegt wahrscheinlich daran das das hier ein Forum für Adminstratoren ist und nicht für Programmierer/Entwickler (ja ich weis das Admins in KMUs meist auch Entwickler sind )

lg,
Slainte
Bitte warten ..
Mitglied: 114757
LÖSUNG 25.02.2015, aktualisiert um 15:32 Uhr
Moin,
eine Structure ist vom Typ value type deswegen klappt die Zuweisung so nicht weil immer nur Kopien einer Structure übergeben werden, siehe auch:
http://stackoverflow.com/questions/7126318/how-do-you-assign-values-to- ...

Gruß jodel32
Bitte warten ..
Mitglied: ChrFriedel
25.02.2015 um 15:32 Uhr
Ich dachte es mir schon... ich kanns nur immer noch nicht glauben Ich hätte viel Geld darauf gesetzt dass das früher ging. Da spielt mir mein Kopf wohl einen Streich. Für den Lerneffekt: Weißt du eventuell warum dem so ist? Da ich über den Key ja auf das Element zugreifen kann weiß der Compiler ja wo es im Speicher liegt. Es sollte doch eigentlich kein Problem sein den Wert zu überschreiben.

Grüße
Bitte warten ..
Mitglied: ChrFriedel
25.02.2015 um 15:35 Uhr
Danke für den Link

Am besten gefällt mir:
Every .NET programmer makes this mistake once. A Structure is a value type, records(0) returns a copy.

Da bin ich wenigstens nicht alleine ;)

Grüße
Bitte warten ..
Mitglied: 114757
25.02.2015 um 15:35 Uhr
Das sollte klar sein wenn du das hier ließt:
https://msdn.microsoft.com/de-de/library/s1ax56ch.aspx
Bitte warten ..
Mitglied: ChrFriedel
25.02.2015 um 15:37 Uhr
Danke nochmal

Die andere Antwort habe ich zeitgleich geschrieben und sie war eigentlich für Slainte gedacht.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Visual Studio
gelöst VB.Net - Problem mit Umleitung der Standard-Ausgabe (4)

Frage von emeriks zum Thema Visual Studio ...

Visual Studio
gelöst Vb.net Pfadangabe mit Wildcards wie Stern Regex Pattern (2)

Frage von Pilger83 zum Thema Visual Studio ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...