如何将泛型方法包装成非泛型方法?

时间:2017-07-23 18:35:24

标签: c# generics

public async Task QueueCallAsync(Task apiCall, RequestType requestType)
{
  // how do you forward the call to the generic implementation while omitting the result?
  await QueueCallAsync<Void>(apiCall, requestType);
}

public async Task<T> QueueCallAsync<T>(Task<T> apiCall, RequestType requestType)
{
}

到目前为止,我实现的只是递归调用或不可编译的代码。我宁愿包装通用实现而不是复制代码。

有谁知道如何告诉c#编译器在这里使用泛型方法?

与其他问题不同,我想知道是否有内置的,有意的方法,在不使用反射的情况下解决这个问题。

我宁愿复制粘贴代码而不是在这种情况下反映。

1 个答案:

答案 0 :(得分:2)

您可以简单地将任务包装到另一个返回伪int值的位置:

async Task<int> Wrap(Task t)
{
    await t;
    return 42;
}

await QueueCallAsync<int>(Wrap(apiCall), requestType);

旁注:您使用的方法名称可能会让方法的用户感到困惑,因为通常在创建任务时已经运行了这些名称,而且它们“排队”它们的时间太晚......