【发布时间】:2016-06-10 15:36:03
【问题描述】:
如果我有这样的课程
interface IDeclaration<T> {...}
我应该如何实现检查我的特定类的实例是否派生自 IDeclaration<T>,如果是 - 在我们的特定情况下,T 的类型是什么。
提前谢谢你
【问题讨论】:
标签: c# generics reflection interface
如果我有这样的课程
interface IDeclaration<T> {...}
我应该如何实现检查我的特定类的实例是否派生自 IDeclaration<T>,如果是 - 在我们的特定情况下,T 的类型是什么。
提前谢谢你
【问题讨论】:
标签: c# generics reflection interface
IDeclaration 是一个接口,而不是一个类。类可以实现这个接口,而不是派生它。
要检查特定对象是否实现IDeclaration<T> 接口,您可以在该实例类型上调用GetInterfaces 方法并搜索该特定接口,如下所示:
var instance = ...
var @interface =
instance.GetType()
.GetInterfaces()
.FirstOrDefault(i =>
i.IsGenericType &&
i.GetGenericTypeDefinition() == typeof (IDeclaration<>));
bool is_IDeclaration = @interface != null;
要获取泛型类型参数(T),您可以像这样使用GetGenericArguments 方法:
if (is_IDeclaration)
{
var typeof_T = @interface.GetGenericArguments()[0];
}
【讨论】: