我需要一个方法来查找一个名为泛型方法的参数的原始类型:
public GetGenericArgumentName<T>() where T : IFoo
{
StackFrame fr = new StackFrame(0, true);
StackTrace st = new StackTrace(fr);
var ga = fr.GetMethod().GetGenericArguments();
foreach (var item in ga)
{
Console.WriteLine(item.Name);
}
}
但我无法在来电者处获得原始类型。
让我们说,我必须从IFoo派生类
public class Foo : IFoo {}
public class Foo2 : IFoo {}
如果我用以下方法给他们打电话,我希望得到以下结果:
/* 1 */ GetGenericArgumentName<Foo>()
/* 2 */ GetGenericArgumentName<Foo2>()
对于第一个,我期待Foo作为结果,并期望第二个Foo2。 我错过了什么?
答案 0 :(得分:3)
您根本不需要使用堆栈跟踪 - 只需使用typeof(T)
:
Console.WriteLine(typeof(T).Name);
这将为第一个电话打印Foo
,为第二个电话打印Foo2
。
这比上堆栈更简单,更可靠,更有效。