Frage

Ich habe Probleme beim Festlegen eines Felds für ein Objekt in einer Windows Phone 7-App (ich vermute, dass es mit dem Compact Framework zusammenhängt und nicht spezifisch für Windows Phone 7 ist).Ich glaube, dass dies spezifisch für das Festlegen von Werten ist struct Typen.Normalerweise verwende ich Folgendes:

// 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);

Bedauerlicherweise SetValueDirect existiert unter Windows Phone 7 nicht und wird einfach verwendet SetValue hat nichts mit dem Ziel zu tun.Gibt es eine alternative Möglichkeit zum Einstellen? struct Felder auf WP7 durch Reflexion?

War es hilfreich?

Lösung

Sie müssten die Struktur einpacken, SetValue verwenden, und auspacken.Nicht sehr elegant, aber ein weiterer guter Grund dafür, dass Strukturen grundsätzlich schreibgeschützt sein sollten.Derzeit lassen Sie vermutlich den letzten Schritt aus (wenn Sie eine implizite Box verwenden, ohne die Box zu erfassen, wird Ihre Änderung am Boxwert verworfen).Visuell:

MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;

Generell ist die Metaprogrammierung bei CF eher schwach.Wenn Sie viel davon tun, gibt es Möglichkeiten, die Metaprogrammierung durchzuführen im Voraus über vollständiges .NET, Überprüfung einer CF-Assembly und Generierung einer CF-Assembly, die die von Ihnen benötigte Funktionalität kapselt.Ich hatte für diesen Zweck Erfolg mit IKVM.Reflection (der integrierten .NET-Reflexion). kann nicht mach das).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top