亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法使用反射在結構實例上設置屬性?

有沒有辦法使用反射在結構實例上設置屬性?

C#
DIEA 2019-11-20 14:17:27
我正在嘗試編寫一些代碼來設置結構的屬性(重要的是它是結構的屬性),但失敗了:System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle();PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height");propertyInfo.SetValue(rectangle, 5, null);高度值(由調試器報告)永遠不會設置為任何值-它保持默認值0。之前我在課堂上做了很多思考,并且效果很好。另外,我知道在處理結構時,如果設置字段,則需要使用FieldInfo.SetValueDirect,但是我不知道PropertyInfo的等效項。
查看完整描述

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;


查看完整回答
反對 回復 2019-11-20
?
哈士奇WWW

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),但它們更痛苦。


查看完整回答
反對 回復 2019-11-20
?
MM們

TA貢獻1886條經驗 獲得超2個贊

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

查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關注
  • 305 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號