Warum legt Reflektion keine Eigenschaft in einem Struct fest?

8
%Vor%

Der erste gedruckte Wert ist 32, während der zweite Wert 0 ist. Es wurde keine Ausnahme ausgelöst

    
mustafabar 07.07.2011, 09:19
quelle

3 Antworten

12

Das liegt daran, dass das Boxen Ihrer Struktur eine Kopie davon macht. Sie sollten es also früher einrahmen, damit Sie den Getter aus den gleichen Daten aufrufen, die Sie geändert haben. Der folgende Code funktioniert:

%Vor%     
jbtule 07.07.2011, 13:35
quelle
4

structs sind ValueTypes, die als Wert übergeben werden. Das bedeutet, dass Sie nur Kopien der gesamten Struktur übergeben, nicht einen Verweis auf das ursprüngliche Objekt.

Wenn Sie es also in info.SetValue(_priceStruct, 32, null) übergeben, wird eine Kopie an die Methode übergeben und mutiert, sodass das ursprüngliche Objekt überhaupt nicht geändert wird. Ein weiterer Grund, warum veränderbare Strukturen böse sind.

    
Botz3000 07.07.2011 09:24
quelle
1

Sie können sie immer noch mit Reflektion ändern, aber es ist ein bisschen langatmig.

Siehe dieses Beispiel: Ссылка

    
DoctorMick 07.07.2011 09:24
quelle