第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

有沒有辦法使用反射在結(jié)構(gòu)實例上設(shè)置屬性?

有沒有辦法使用反射在結(jié)構(gòu)實例上設(shè)置屬性?

C#
溫溫醬 2019-12-06 10:07:17
我正在嘗試編寫一些代碼來設(shè)置結(jié)構(gòu)的屬性(重要的是它是結(jié)構(gòu)的屬性),但失敗了:System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle();PropertyInfo propertyInfo = typeof(System.Drawing.Rectangle).GetProperty("Height");propertyInfo.SetValue(rectangle, 5, null);高度值(由調(diào)試器報告)永遠不會設(shè)置為任何值-它保持默認值0。之前我在課堂上做了很多思考,并且效果很好。另外,我知道在處理結(jié)構(gòu)時
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經(jīng)驗 獲得超4個贊

的值rectangle被裝箱-但是您將丟失被修改的裝箱值。嘗試這個:


Rectangle rectangle = new Rectangle();

PropertyInfo propertyInfo = typeof(Rectangle).GetProperty("Height");

object boxed = rectangle;

propertyInfo.SetValue(boxed, 5, null);

rectangle = (Rectangle) boxed;


查看完整回答
反對 回復(fù) 2019-12-06
?
慕姐8265434

TA貢獻1813條經(jīng)驗 獲得超2個贊

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


查看完整回答
反對 回復(fù) 2019-12-06
?
德瑪西亞99

TA貢獻1770條經(jīng)驗 獲得超3個贊

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

查看完整回答
反對 回復(fù) 2019-12-06
  • 3 回答
  • 0 關(guān)注
  • 458 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號