Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 913 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 ..
Ähnliche Inhalte
Basic
gelöst Mit vb.net PDF in Word-Dok einfügen (10)

Frage von ahstax zum Thema Basic ...

Visual Studio
Srv records aus dem dns abfragen unter vb.net (14)

Frage von Herbrich19 zum Thema Visual Studio ...

Visual Studio
gelöst Vb.net: Word-Doc seitenweise durchsuchen nach Textmarke (7)

Frage von ahstax zum Thema Visual Studio ...

Visual Studio
gelöst VB.Net - Hilfe bei Regex (8)

Frage von emeriks zum Thema Visual Studio ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(3)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (16)

Frage von Lynkon zum Thema TK-Netze & Geräte ...