【发布时间】:2018-11-19 03:56:27
【问题描述】:
我需要一个方法来找到一个为这样的泛型方法调用的参数的原始类型:
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。 我错过了什么?
【问题讨论】:
-
您的代码为我生成了您预期的输出。你看到了什么输出?
-
看起来像 XY 问题。你想做什么?
-
它将 T 显示为输出。
标签: c# generics inheritance reflection