如何使用反射动态确定类型是否为接口?

时间:2015-05-26 21:46:55

标签: c# reflection interface

对于初学者来说,这个问题是重复这篇帖子,我已经阅读了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>实际上实现了大量的接口(即IListICollectionIEnumerable等。)

由于我正在动态进行此调查,因此我不知道如何测试我的类型是否实现特定 Interface,如 all 示例显示此类作为我在开头发布的链接,执行以下操作:

typeof(IMyInterface).IsAssignableFrom(typeof(MyType)) typeof(MyType).GetInterfaces().Contains(typeof(IMyInterface))

我需要帮助确定对象属性是否动态地反映在焦点上,是直接一个接口而不是具体类型?所有的例子都需要测试已知的Interface已知的具体类型,但由于这是动态发生的,我不知道如何实现这一目标?

1 个答案:

答案 0 :(得分:4)