質問

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を使用することはターゲットには何もしません。反射を介してWP7上のstructフィールドを設定するための代替方法はありますか?

役に立ちましたか?

解決

Structをボックス化する必要がある場合は、setValue、、unbox を使用してください。それほどエレガントではありませんが、構造体は一般的に読み取り専用になるべきであるもう1つの良い理由です。現在、(ボックスをキャプチャせずに暗黙的なボックスを使用することで、ボックスの値への変更を破棄することで)最後のステップを省略しています。視覚的に:

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

より一般的には、メタプログラミングはCFでかなり弱いです。これを行っている場合は、FULL .NETを介してMETA-PROGRAPMMONG を実行し、必要な機能をカプセル化するCFアセンブリを生成する方法があります。この目的のためにIKVM.REFTRECTIONを使用して成功しました(はこれを行うことはできません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top