2017-02-22 62 views
3

我想使用C#的反射和自定義屬性來簡化使用中央管理類來註冊一系列類型(即,它提供靜態方法,其中包含字符串鍵和調用/檢索相關類型的適當方法/參數)。看看這裏和其他地方的其他問題,似乎最好的方式是簡單地遍歷程序集的所有公共類型 - 因爲它的目的是成爲一個庫 - 並檢查每種類型是否具有適當的屬性,然後將相關值添加到基礎字典中。反思和迭代肯定會很慢,但我可以忍受它,因爲它應該只發生一次。在.NET中檢索類型的自定義屬性標準

不幸的是,我無法弄清楚如何從一個類型的屬性。對於方法和裝配體,我可以使用System.Reflection.Extensions中的CustomAttributeExtensions.GetCustomAttribute<MyAttribute>(base),但這不會爲Type提供過載; Assembly.GetCustomAttribute(Assembly, Type)this question中使用的.IsDefined(...)方法相同。 OthersuggestionsType本身的使用方法,從the documentation,似乎從mscorelib.dll加載,但它似乎沒有出現在Intellisense甚至添加引用後,我不知道如何與.dll交互。 NET標準,反正(如,它減少對所有任意平臺上運行的能力嗎?)

我失去了一些東西明顯,或者是不是真的這樣很難得到一個Attribute回到斷開Type的?

+0

你能告訴你如何嘗試調用'GetCustomAttributes()'的例子嗎? –

+0

@RenéVogt這就是'CustomAttributeExtensions.GetCustomAttribute (base)'的用途('base'是我試圖測試的'Type'),但我承認它可能有更好的路標幷包含更多的上下文。無論哪種方式,康奈爾的答案如下。 – WovenTales

回答

4

嘗試typeof(YourType).GetTypeInfo().GetCustomAttributes();

+0

啊,就是這樣!那裏的'Info'顯然非常重要。現在我唯一的問題是爲什麼我沒有看到任何其他答案。謝謝! – WovenTales

+0

它將在.net框架中與GetType()一起使用。 .net核心中需要GetTypeInfo()。 –

+0

這是有道理的。我喜歡.NET Core和Standard背後的心態,但我不禁感到文檔在某些地方有點薄。 – WovenTales