我在Windows Phone 7应用程序中的对象上设置字段时遇到问题(我怀疑它与紧凑框架有关,而不是特定于Windows Phone 7)。我认为这特定于设置struct
类型的值。通常我使用以下内容:
// 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);
不幸的是,Windows Phone 7上不存在SetValueDirect
,只使用SetValue
无法执行任何操作。是否有另一种方法可以通过反射在WP7上设置struct
字段?
答案 0 :(得分:2)
您必须打包结构,使用SetValue,和取消装箱。不是很优雅,但结构通常应该是只读的另一个好理由。目前,您可能会忽略最后一步(通过使用隐式框而不捕获框,对丢弃的盒装值进行更改)。目测:
MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;
更一般地说,元编程在CF上相当薄弱。如果你正在做很多这样的事情,有很多方法可以通过完整的.NET进行元编程提前,检查CF程序集并生成封装所需功能的CF程序集。我已成功使用IKVM.Reflection用于此目的(内置的.NET反射不能执行此操作)。