2015-05-26 23 views
1

对于初学者来说,这个问题是不是后,本人已阅读100次的重复(请阅读的问题):在运行时动态How to determine if a type implements an interface with C# reflection如何确定动态如果类型是使用反射的接口?

我使用反射性能,通过对对象的迭代操纵和添加数据。对我来说,根本问题是自然,你无法实例的使用Activator.CreateInstance后下游不得将针对发现的InterfaceInterface类型的集合类型跑了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,ICollectionIEnumerable等)。

因为我动态做这个调查,我不知道该怎样来测试,如果我喜欢的类型实现了特定Interface所有的例子表明,如我贴在里面做下面开始链接的想法:

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

我需要帮助确定所述对象属性反映在动态和在焦点,是直接接口,而不是一个浓rete type?所有的例子都需要测试已知的Interface到一个已知的具体类型,但由于这是动态发生的,我不知道如何完成这个?

+4

['Type.IsInterface'财产(https://msdn.microsoft.com/en-us/library/system.type.isinterface%28v=vs.110 %29.aspx)? –

+2

您是否阅读过文档? – SLaks

+1

@SLaks - 感谢您的高质量帮助。这无疑帮助我解决了这个问题。 – atconway

回答

相关问题