Boxen verhält sich in C # und VB anders

8

Ich versuche, eine Struktur an eine Unter / Lücke zu übergeben, um sie mit Daten zu füllen. In C # funktioniert das gut, indem man

macht %Vor%

Dieser Code besteht den Test in C # in vb thoug

%Vor%

Hat jemand eine Erklärung dafür?

STRANGE?

    
PEtter 28.10.2014, 15:58
quelle

2 Antworten

7

Ich glaube, das ist eine bekannte Einschränkung bei der Verwendung von SetValue in VB beim Übergeben von Strukturen (selbst wenn die Variable selbst als Object deklariert ist). Wenn Sie den Inhalt von val in A vor und nach dem Aufruf von SetValue betrachten, werden Sie sehen, dass der Wert der Struktur nicht geändert wird. Die Erklärung, die ich gesehen habe, ist, dass VB den zugrundeliegenden Wert wieder (über einen Aufruf von GetObjectValue ) einkoppelt, eine Kopie erstellt und den Wert der Kopie ändert.

Eine Problemumgehung, die ich gesehen habe, ist, den Wert in eine ValueType und den Aufruf SetValue zu konvertieren (Sie müssen den Parameter auch explizit ByRef:

ändern %Vor%

Natürlich verstärkt diese Komplexität nur das Prinzip, dass mubare Strukturen um jeden Preis vermieden werden sollten.

    
D Stanley 28.10.2014 16:36
quelle
2

Siehe Reflexion der Struktur unterscheidet sich von der Klasse - aber nur in Code für eine Erklärung, aber die Zusammenfassung ist:

%Vor%

* {an diesem Punkt wird val als Wert übergeben, dh es handelt sich um eine Kopie, die gerade aktualisiert wird}

wie für eine Problemumgehung ...

%Vor%

Offensichtlich müssen Sie sich davor schützen, das nur für Strukturen auszuführen ...

    
tolanj 28.10.2014 16:53
quelle

Tags und Links