3 回答

TA貢獻1712條經驗 獲得超3個贊
的值rectangle被裝箱-但是您將丟失被修改的裝箱值。嘗試這個:
Rectangle rectangle = new Rectangle();
PropertyInfo propertyInfo = typeof(Rectangle).GetProperty("Height");
object boxed = rectangle;
propertyInfo.SetValue(boxed, 5, null);
rectangle = (Rectangle) boxed;

TA貢獻1799條經驗 獲得超6個贊
聽說過SetValueDirect嗎?他們這樣做是有原因的。:)
struct MyStruct { public int Field; }
static class Program
{
static void Main()
{
var s = new MyStruct();
s.GetType().GetField("Field").SetValueDirect(__makeref(s), 5);
System.Console.WriteLine(s.Field); //Prints 5
}
}
除了未記錄的方法以外,還有其他方法__makeref可以使用(請參閱參考資料System.TypedReference),但它們更痛苦。

TA貢獻1886條經驗 獲得超2個贊
我有完全一樣的問題。@丹·布萊恩特(Dan Bryant)-盡管我同意可變結構是邪惡的,但我這樣做的原因是要為不可變結構創建工廠類,并且我需要能夠設置只讀屬性。我正在做與MVC Model Binder子系統類似的事情,盡管簡單得多,并且與Web無關。因此,我正在制作不可變的結構,但我只允許自己在創建時對它們進行一次突變,因此,我認為這將避免所有潛在的弊端。
- 3 回答
- 0 關注
- 305 瀏覽
添加回答
舉報