在通用方法中,我想知道传递的实际参数的类型。例如,我有两个类:
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
帧也是如此。
答案 0 :(得分:1)
typeof(T)
为您提供类型。通常当我在泛型类或方法中时,这是我想要基于的类型。
instance.GetType()
获取实例的类型,但我可能正在寻找已实现的接口或基类,而.GetType()
将永远不会返回。另外,正如您所指出的,如果您在null上调用.GetType()
,您将获得空引用异常。