2

我在 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);

不幸的是SetValueDirect,Windows Phone 7 上不存在,并且简单地使用SetValue不会对目标做任何事情。是否有另一种方法可以struct通过反射在 WP7 上设置字段?

4

1 回答 1

2

您必须将结构装箱,使用 SetValue和 unbox。不是很优雅,但结构通常应该是只读的另一个很好的理由。目前,您可能正在省略最后一步(通过使用隐式框而不捕获框,是否丢弃了对装箱值的更改)。视觉上:

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

更一般地说,元编程在 CF 上相当薄弱。如果您经常这样做,有办法通过完整的 .NET提前进行元编程,检查 CF 程序集并生成一个封装了您需要的功能的 CF 程序集。为此,我已经成功使用 IKVM.Reflection (内置的 .NET 反射无法做到这一点)。

于 2012-07-28T06:25:36.167 回答