是否可以在 C# 中使用泛型类型参数使接口方法 return 成为另一个方法的类型?

Is it possible to make an interface method return the type of another method with a generic type parameters in C#?

所以我正在尝试创建一些流畅的代码来执行网络请求。我希望它看起来像这样...

// Result should be of type MyClass
var result = await _webRequests.Get("Api/Route/Here")
                               .Returns<MyClass>()
                               .HasToken("MY_TOKEN")
                               .ExecuteAsync();

// Result should be of type HttpResponseMessage
var result = await _webRequests.Get("Api/Route/Here")
                               .HasToken("MY_TOKEN")
                               .ExecuteAsync();

我的目标是得到它,以便如果未指定 Returns 方法,那么它 return 是一个 HttpResponseMessage,如果它被指定,它 return 是类型指定。

_webRequests 是一个接口,其中包含一些基本的 HttpMethod 调用

IUseRequired Get(string url);
IUseRequired Post(string url);

然后 IUseRequired 接口具有调用所需的方法...

IUseOptionalOrExecute UsesApi(string apiName);

所有 UsesApi 方法所做的就是告诉在使用 IHttpClientFactory 时使用哪个 HTTPClient。

现在 IUseOptionalOrExecute 界面是问题开始的地方...

IUseOptionalOrExecute Returns<TReturn>();
IUseOptionalOrExecute HasToken(string token);
Task<TReturn> ExecuteAsync();

我希望它看起来像这样,所以传递给 Returns 方法的任何内容都将用作 return ExecuteAsync 方法。当然这是行不通的,因为 ExecuteAsync 不知道 TReturn 是什么。我想过在调用Returns方法时将类型存储为变量,但是我无法设置[=29=的return类型]Execute是一个变量类型。或者我可以吗? 任何人都知道我可以解决这个问题的方法吗?谢谢!

使用typeof(Return)判断类型。

Returns<TReturn> 函数的存在有充分的理由吗?

当我实现我的 HTTP 客户端时,我在 ExecuteAsync<TReturn> 上指定了 return 类型,因为事先不需要知道类型,因此我避免了解决你的问题。

如果您出于某种原因需要该类型,我认为您可能需要 IUseOptionalOrExecute<TReturn> Returns<TReturn>(); 并处理所有必要的并发症。

如果 ExecuteAsync<TReturn> 不足以解决您的问题,我可以进一步说明。