Top-Themen

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, 936 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
Visual Studio
Structure von Arrays in VB.NET
gelöst Frage von MarcoBornVisual Studio4 Kommentare

Hallo Forum, ich habe 2 Fragen zum Thema Structures in VB.NET: 1. Ist es möglich, in VB.NET eine Structure ...

Visual Studio
Variablen in VB.NET
gelöst Frage von MarcoBornVisual Studio4 Kommentare

Hallo Forum, in VB.NET gibt es ja die Möglichkeit, Variablen global oder lokal zu definieren. Zusätzlich können Variablen auch ...

Visual Studio
Automatische Treiberinstallation mit VB.NET
gelöst Frage von joehuabaVisual Studio3 Kommentare

Hallo Zusammen, Folgende Problemstellung: 1. Ich habe einen Rechner per Hand neu installiert, da fehlen einige Treiber 2. Ich ...

Visual Studio
Netzwerkdrucker installieren, vb.net
gelöst Frage von Tealk144Visual Studio

Hallo Leute, also nach langem Tüfteln habe ich jetzt einen Funktionierenden Drucker installationscode, den ich gerne mit euch teilen ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 5 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 6 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1010 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen17 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...