![](/img/trans.png)
[英]How do I determine the generic type of an implemented interface using reflection?
[英]How to determine dynamically if type is an Interface using reflection?
對於初學者,此問題不是我已閱讀100次(請繼續提問)的重復: 如何確定類型是否使用C#反射實現接口
我正在使用反射在運行時動態地遍歷對象的屬性以操縱和添加數據。 對我來說,根本問題是自然,你不能實例的實例Interface
,因此使用我的代碼Activator.CreateInstance
后下游不得對發現的各類跑出Interface
或集合Interface
類型。
假設我在Person
類中具有以下內容:
public IList<Address> addresses1 {get ; set; } \\\\ This property **should** flag being an Interface public List<Address> addresses2 {get ; set; } \\\\ This property **should NOT** flag being an Interface
在思考屬性時使用以下代碼,我可以確定該屬性是否實現了Interface
:
propertyTypeFromReflection.GetInterfaces().Any()
我IList<Address>
的問題是IList<Address>
和List<Address>
都有上面的語句返回true
。 這是因為,即使我們知道的List<T>
實際上也實現了許多接口(即IList
, ICollection
, IEnumerable
等)。
由於我是動態進行調查的,所以我不知道如何測試我的類型是否實現了特定的 Interface
如所有示例所示,例如我一開始發布的鏈接,它執行以下操作:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
我需要幫助確定對象屬性Property是否動態且重點突出,是否直接是Interface而不是具體類型? 所有示例都需要測試已知Interface
到已知具體類型的代碼,但是由於這是動態發生的,所以我不知道該如何完成?
您可以使用Type.IsInterface
屬性https://msdn.microsoft.com/zh-cn/library/system.type.isinterface(v=vs.110).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.