对于初学者来说,这个问题是不重复这篇帖子,我已经阅读了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
已知的具体类型,但由于这是动态发生的,我不知道如何实现这一目标?
答案 0 :(得分:4)
您可以使用Type.IsInterface
财产
https://msdn.microsoft.com/en-us/library/system.type.isinterface(v=vs.110).aspx