【问题标题】:Get generic delegate return type获取通用委托返回类型
【发布时间】:2021-02-22 18:46:15
【问题描述】:

我有一个 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;
}

如果委托参数的返回类型确实是TResult,有没有一种方法可以提前检查,而无需先调用它?这个不用改参数Func&lt;TResult&gt;

【问题讨论】:

    标签: c# reflection delegates


    【解决方案1】:

    你可以使用Delegate.MethodReturnType

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

    【讨论】:

    • 然后检查类型是否确实是 TResult 就像我的方法声明的那样,正确的比较代码应该是 a.Method.ReturnType == typeof(TResult) 吗?
    • @YonatanNir 是的。但更常见的方法是使用Type.IsAssignableFrom
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 2013-08-19
    • 2015-05-28
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多