【问题标题】:How to retrieve generic argument with reflection如何使用反射检索泛型参数
【发布时间】:2016-06-10 15:36:03
【问题描述】:

如果我有这样的课程

interface IDeclaration<T> {...}

我应该如何实现检查我的特定类的实例是否派生自 IDeclaration&lt;T&gt;,如果是 - 在我们的特定情况下,T 的类型是什么。

提前谢谢你

【问题讨论】:

标签: c# generics reflection interface


【解决方案1】:

IDeclaration 是一个接口,而不是一个类。类可以实现这个接口,而不是派生它。

要检查特定对象是否实现IDeclaration&lt;T&gt; 接口,您可以在该实例类型上调用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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多