【问题标题】: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 的代码不得针对发现的类型运行是 InterfaceInterface 类型的集合。

假设我在 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&lt;Address&gt;List&lt;Address&gt; 都有上面的语句返回true。这是因为即使是我们所知道的 List&lt;T&gt; 实际上也实现了一系列接口(即 IListICollectionIEnumerable 等)。

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

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

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

【问题讨论】:

  • 您阅读文档了吗?
  • @SLaks - 感谢您的质量帮助。它确实帮助我解决了这个问题。

标签: c# reflection interface


【解决方案1】:

【讨论】:

  • 通过树木看不到森林的情况 - 这非常有效。在我这个非常工作的人对 C# 反射的了解中,我显然错过了这一点。
猜你喜欢
  • 2012-01-16
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多