2012-07-28 61 views
2

我在設置Windows Phone 7應用程序中的對象上的字段時遇到問題(我懷疑它與緊湊框架有關,而不是特定於Windows電話7)。我相信這是專門設置值爲struct類型的。通常我使用以下命令:如何在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); 

不幸的是SetValueDirect不上Windows Phone 7的存在,簡單地使用SetValue沒有做任何事情的目標。有沒有其他方法通過反射來設置WP7上的struct字段?

回答

1

你將不得不裝箱結構,使用SetValue,和unbox。不是很優雅,但結構的另一個很好的理由通常應該是隻讀的。目前你大概是省略了最後一步(通過使用隱式框而不捕獲框,對盒裝值的更改是否被丟棄)。目視:

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

更一般地說,元編程在CF上相當薄弱。如果你正在做很多這樣的事情,有很多方法可以通過完整.NET預先編寫,檢查一個CF程序集並生成一個CF程序集來封裝你需要的功能。我已經使用IKVM.Reflection爲此目的成功(th內置.NET反射不能做到這一點)。

相關問題