Windows Phone 7のオブジェクトに構造体型のフィールドを設定する方法
-
13-12-2019 - |
質問
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を使用して成功しました(はこれを行うことはできません)。
所属していません StackOverflow