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を使用し、ボックス化を解除する必要があります。あまりエレガントではありませんが、構造体が一般的に読み取り専用である必要があるもう1つの理由があります。現在、おそらく最後のステップを省略しています(ボックスをキャプチャせずに暗黙のボックスを使用することにより、ボックス化された値への変更は破棄されます)。視覚的に:

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 に答える