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:
Natürlich verstärkt diese Komplexität nur das Prinzip, dass mubare Strukturen um jeden Preis vermieden werden sollten.
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 ...