C# 从 Func<> 委托中获取类型参数

C# Get Type Parameters from a Delegate which is a Func<>

例如,假设我已将 Func<> 转换为委托...

Func<object, int> func = GetFunc();
Delegate d = func;

现在,如果我提前知道 Delegate 的类型,我可以直接转换回 Func<>

Func<object, int> newFunc = (Func<object, int>)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(); // may return a Func<T>, Func<T,T2>, Func<T,T2,T3>, etc...
Type[] funcParams = GetTypeParamsFromDelegate(d);

or at least, get the Type parameters so I can rebuild the type:

这个很简单:

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