C#从函数委托获取类型参数<&燃气轮机;

C#从函数委托获取类型参数<&燃气轮机;,c#,delegates,func,C#,Delegates,Func,例如,假设我已将Func强制转换为代理 Func<object, int> func = GetFunc(); Delegate d = func; Func-Func=GetFunc(); 代表d=func; 现在,如果我提前知道委托的类型,我可以直接转换回Func Func newFunc=(Func)d; 但是如果直到运行时我才知道函数类型呢?如何从代理处取回我的Func Delegate d = GetFunc(); // may return a Func<T&

例如,假设我已将Func强制转换为代理

Func<object, int> func = GetFunc();
Delegate d = func;
Func-Func=GetFunc();
代表d=func;
现在,如果我提前知道委托的类型,我可以直接转换回Func

Func newFunc=(Func)d;
但是如果直到运行时我才知道函数类型呢?如何从代理处取回我的Func

Delegate d = GetFunc(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
var func = GetFuncFromDelegate(d);
Delegate d=GetFunc();//可以返回Func、Func、Func等。。。
var func=GetFuncFromDelegate(d);
或者至少获取类型参数,以便我可以重建类型:

Delegate d = GetFunc(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
Type[] funcParams = GetTypeParamsFromDelegate(d);
Delegate d=GetFunc();//可以返回Func、Func、Func等。。。
类型[]funcParams=GetTypeParamsFromDelegate(d);
或者至少获取类型参数,以便我可以重建类型:

Delegate d = GetFunc(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
Type[] funcParams = GetTypeParamsFromDelegate(d);
这一点很简单:

Type[] funcParams = (d.GetType()).GenericTypeArguments;

可能有用的阅读:+1正好给了我所需要的。谢谢完成后,如果没有其他人比我强的话,我会发布一个完整的代码答案。这很有效,尽管我肯定喜欢CollinD的链接,它还为我提供了foreach参数的名称(method.GetParameters()中的ParameterInfo param)