如果我有这样的课程
interface IDeclaration<T> {...}
我应该如何实现检查我的特定类的实例是否来自IDeclaration<T>
,如果是,那么在我们的特定情况下类型T
是什么。
提前谢谢
答案 0 :(得分:1)
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];
}