C# 如何将泛型方法包装成非泛型方法? public async Task QueueCallAsync(Task apiCall,RequestType RequestType) { //如何将调用转发到泛型实现,同时忽略结果? 等待QueueCallAsync(apiCall,requestType); } 公共异步任务QueueCallAsync(任务apiCall,请求类型RequestType) { }

C# 如何将泛型方法包装成非泛型方法? public async Task QueueCallAsync(Task apiCall,RequestType RequestType) { //如何将调用转发到泛型实现,同时忽略结果? 等待QueueCallAsync(apiCall,requestType); } 公共异步任务QueueCallAsync(任务apiCall,请求类型RequestType) { },c#,generics,C#,Generics,到目前为止,我只实现了递归调用或不可编译的代码。我宁愿包装通用实现,而不是复制代码 有人知道如何告诉c#编译器在这里使用泛型方法吗 与其他问题不同,我想知道是否有一种内置的、有意的方法来解决这个问题而不使用反射 在这种情况下,我宁愿复制粘贴代码也不愿反射。您可以简单地将任务包装成另一个返回假int值的任务: public async Task QueueCallAsync(Task apiCall, RequestType requestType) { // how do you forwa

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

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

与其他问题不同,我想知道是否有一种内置的、有意的方法来解决这个问题而不使用反射


在这种情况下,我宁愿复制粘贴代码也不愿反射。

您可以简单地将任务包装成另一个返回假int值的任务:

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)
{
}
异步任务包装(任务t)
{
等待t;
返回42;
}
wait QueueCallAsync(Wrap(apiCall)、requestType);

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

您调用这些方法的确切方式是否可能重复?编译器只能为您做这么多,只要它知道正在使用什么类型。你还没有展示你正在处理的类型以及如何向编译器表达这些类型。坦率地说,把不返回任何内容的
Task
任务“转换”为返回
t
任务是没有意义的。。。如果有什么区别的话,应该是相反的。您到底想在这里实现什么?有些是无结果调用,不返回任何内容,而有些则返回值。我不确定我们是否彼此错过了——我确实希望Task方法调用Task方法——相反,它甚至不起作用。如果没有办法,我想我只能接受了。该死。我应该想到这一点。是的,那很好。它被称为队列这一事实与课程的目的有关,但无论如何还是要感谢您的建议。
async Task<int> Wrap(Task t)
{
    await t;
    return 42;
}

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