【发布时间】: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 测试为已知的具体类型,但由于这是动态发生的,我不知道如何实现这一点?
【问题讨论】:
-
您阅读文档了吗?
-
@SLaks - 感谢您的质量帮助。它确实帮助我解决了这个问题。
标签: c# reflection interface