在.NET泛型方法中,如何获取实际参数类型

时间:2015-03-31 14:35:33

标签: .net generics methods types parameters

在通用方法中,我想知道传递的实际参数的类型。例如,我有两个类:

class A {}
class B {}

然后一个方法将任何类作为参数:

void M<T>(T instance)
{
    // how to tell what is the type of T if instance is null?
    // (so instance.GetType() won't work)
}

例如,如何在调用的方法中对以下两个调用进行区分:

M<A>(null);
M<B>(null);

这样的事情可能吗?方法MethodBase.GetCurrentMethod()返回泛型方法定义,而不是实际的泛型参数。 StackTrace帧也是如此。

1 个答案:

答案 0 :(得分:1)

typeof(T)为您提供类型。通常当我在泛型类或方法中时,这是我想要基于的类型。

instance.GetType()获取实例的类型,但我可能正在寻找已实现的接口或基类,而.GetType()将永远不会返回。另外,正如您所指出的,如果您在null上调用.GetType(),您将获得空引用异常。