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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用反射按聲明順序獲取屬性

使用反射按聲明順序獲取屬性

滄海一幻覺 2019-10-29 10:48:04
我需要按照在類中聲明它們的順序使用反射來獲取所有屬性。根據(jù)MSDN,使用時(shí)無法保證順序GetProperties()GetProperties方法不按特定順序(例如字母順序或聲明順序)返回屬性。但是我讀過,有一種解決方法,可以通過排序?qū)傩訫etadataToken。所以我的問題是,這樣安全嗎?我似乎找不到有關(guān)MSDN的任何信息。還是有其他解決方法?我當(dāng)前的實(shí)現(xiàn)如下所示:var props = typeof(T)   .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)   .OrderBy(x => x.MetadataToken);
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

根據(jù)MSDN, MetadataToken一個(gè)模塊內(nèi)部是唯一的-沒什么可說的是它可以保證任何訂單。


即使它確實(shí)按照您希望的方式運(yùn)行,也將是特定于實(shí)現(xiàn)的,并且隨時(shí)可能更改,恕不另行通知。


請(qǐng)參閱此舊的MSDN博客條目。


我強(qiáng)烈建議您不要依賴任何此類實(shí)現(xiàn)細(xì)節(jié)-請(qǐng)參閱Marc Gravell的回答。


如果您在編譯時(shí)需要一些東西,可以看一下Roslyn(盡管它還處于早期階段)。


查看完整回答
反對(duì) 回復(fù) 2019-10-29
?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果要使用屬性路由,這是我過去使用的方法;


public static IOrderedEnumerable<PropertyInfo> GetSortedProperties<T>()

{

  return typeof(T)

    .GetProperties()

    .OrderBy(p => ((Order)p.GetCustomAttributes(typeof(Order), false)[0]).Order);

}

然后像這樣使用它;


var test = new TestRecord { A = 1, B = 2, C = 3 };


foreach (var prop in GetSortedProperties<TestRecord>())

{

    Console.WriteLine(prop.GetValue(test, null));

}

哪里;


class TestRecord

{

    [Order(1)]

    public int A { get; set; }


    [Order(2)]

    public int B { get; set; }


    [Order(3)]

    public int C { get; set; }

}

如果您在所有屬性上都沒有可比較屬性的類型上運(yùn)行該方法,則該方法將受到禁止,因此請(qǐng)小心使用它的方式,它應(yīng)足以滿足要求。


我省略了Order:Attribute的定義,因?yàn)閅ahia到Marc Gravell的帖子的鏈接中有一個(gè)很好的示例。


查看完整回答
反對(duì) 回復(fù) 2019-10-29
  • 3 回答
  • 0 關(guān)注
  • 1081 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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