我正在遇到Windows Phone 7应用程序中的对象上的字段,(我怀疑它与紧凑框架有关,而不是特定于Windows Phone 7)。我相信这是特定于设置生成的值类型的类型。通常我使用以下内容:

// 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上不存在生成的struct,并且简单地使用SetValueDirect无法对目标进行任何操作。是否有替代方法通过反射在WP7上设置WP7上的SetValue字段?

有帮助吗?

解决方案

您必须框框,使用setValue,和解密。不是很优雅,而是普遍是只读的另一个好理由。目前,您可能会省略最后一步(通过使用隐式框而不捕获框,将您的更改丢弃到盒装值)。视觉上:

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

更一般地,元编程在CF上相当弱。如果您正在进行很多以下操作,则有些方法可以通过完整的.NET提前进行元编程,检查CF组件并生成封装所需功能的CF组件。我已经使用ikvm.reflection为此目的取得了成功(Inuilt .NET反射不能这样做)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top