So legen Sie ein Feld eines Strukturtyps für ein Objekt in Windows Phone 7 fest
-
13-12-2019 - |
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?
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).