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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top