如何动态确定类型是不是是使用反射的接口?
Posted
技术标签:
【中文标题】如何动态确定类型是不是是使用反射的接口?【英文标题】:How to determine dynamically if type is an Interface using reflection?如何动态确定类型是否是使用反射的接口? 【发布时间】:2015-08-08 18:35:24 【问题描述】:对于初学者,这个问题不是重复我阅读了 100 次的这篇文章(请继续阅读问题):How to determine if a type implements an interface with C# reflection
我正在使用反射在运行时动态地迭代对象的属性以操作和添加数据。对我来说,根本问题自然是,您不能实例化 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>
和List<Address>
都有上面的语句返回true
。这是因为即使是我们所知道的 List<T>
实际上也实现了一系列接口(即 IList
、ICollection
、IEnumerable
等)。
由于我是动态进行这项调查的,我不知道如何测试我的类型是否实现了 特定 Interface
像 all 示例显示,例如我在开头发布的链接执行以下操作:
typeof(IMyInterface).IsAssignableFrom(typeof(MyType))
typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))
我需要帮助确定对象属性是否动态反映在焦点上,直接是接口而不是具体类型?所有示例都需要将已知的Interface
测试为已知的具体类型,但由于这是动态发生的,我不知道如何实现这一点?
【问题讨论】:
Type.IsInterface
property?
您阅读文档了吗?
@SLaks - 感谢您的质量帮助。它确实帮助我解决了这个问题。
【参考方案1】:
您可以使用Type.IsInterface
属性
https://msdn.microsoft.com/en-us/library/system.type.isinterface(v=vs.110).aspx
【讨论】:
通过树木看不到森林的情况 - 这非常有效。在我这个非常工作的人对 C# 反射的了解中,我显然错过了这一点。以上是关于如何动态确定类型是不是是使用反射的接口?的主要内容,如果未能解决你的问题,请参考以下文章