是否可以在 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>
不足以解决您的问题,我可以进一步说明。
所以我正在尝试创建一些流畅的代码来执行网络请求。我希望它看起来像这样...
// 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>
不足以解决您的问题,我可以进一步说明。