Come impostare un campo di un tipo di struttura su un oggetto in Windows Phone 7
-
13-12-2019 - |
Domanda
Ho problemi a impostare un campo su un oggetto in un'app Windows Phone 7 (Sospetto che sia correlato al framework compatto e non specifico per Windows Phone 7).Credo che questo sia specifico per impostare i valori che sono di tipo struct
.Normalmente uso quanto segue:
// fieldName is the name of the field I'm interested in setting
FieldInfo fieldInfo = target.GetType().GetField(fieldName);
// target is the object I'm setting the value on
// value is the value that I am setting
fieldInfo.SetValueDirect(__makeref(target), value);
.
Sfortunatamente SetValueDirect
non esiste su Windows Phone 7, e semplicemente usare SetValue
non fa nulla per colpire.C'è un modo alternativo per impostare i campi struct
su WP7 attraverso la riflessione?
Soluzione
Dovresti contenere la struttura, utilizzare setValue, e Unbox .Non molto elegante, ma un'altra buona ragione per cui si decide dovrebbe generalmente essere di sola lettura.Attualmente stai presumibilmente omettendo l'ultimo passo (utilizzando una casella implicita senza catturare la casella, la modifica al valore incassato viene scartato).Visivamente:
MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;
.
Più in generale, la meta-programmazione è piuttosto debole su cf.Se stai facendo molto, ci sono modi per eseguire il meta-programmazione in anticipo tramite Full .NET, ispezionando un gruppo CF e generare un assembly CF che incapsula la funzionalità necessaria.Ho avuto successo usando Ikvm.reflection per questo scopo (th Ibuilt .net Reflection non può fare questo).