获取通用委托 return 类型

Get generic delegate return type

我得到了一个 c# 方法,它接收通用 Delegate 作为参数,并在调用后检查结果的类型:

public async Task<TResult> InvokeAction<TResult>(Delegate action, object[] actionArgs = null)
{
...
    var result = action.DynamicInvoke(actionArgs);
    if (result is Task<TResult> task) return await task;
}

如果委托参数的 return 类型确实是 TResult,有没有一种方法可以在不需要先调用它的情况下进行高级检查?这个不用改参数Func<TResult>

您可以使用 Delegate.MethodReturnType:

  Func<int> action = () => 1;
  Delegate a = action;
  Console.WriteLine(a.Method.ReturnType); // prints System.Int32