是否可以使接口方法返回带有C#中泛型类型参数的另一个方法的类型?

因此,我正在尝试创建一些流畅的代码来执行Web请求。我希望它看起来像这样...

// 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方法,则返回HttpResponseMessage;如果已指定,则返回指定的类型。

_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 方法的所有内容都将用作 ExecuteAsync 方法的返回。当然这是行不通的,因为 ExecuteAsync 不知道 TReturn 是什么。我曾考虑过在调用 Returns 方法时将类型存储为变量,但是我无法将 Execute 的返回类型设置为变量类型。可以吗 有人知道我可以解决这个问题的方法吗?谢谢!

iCMS 回答:是否可以使接口方法返回带有C#中泛型类型参数的另一个方法的类型?

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

实现HTTP客户端时,我在ExecuteAsync<TReturn>上指定了返回类型,因为无需事先知道该类型,因此避免了解决您的问题。

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

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

,

使用typeof(TReturn)确定类型。

本文链接:https://www.f2er.com/2237891.html

大家都在问