[英]Generic Type Return and Argument order in c#
我想创建一个通用方法,如下所示:
Task<Response> PerformSomeAction<Request, Response>(
Request request, string token)
where Response : ResponseModel
where Request : RequestModel;
在声明时,我们需要保持任何顺序吗?
我们也可以像下面这样写吗?
Task<Response> PerformSomeAction<Response, Request>(
Request request, string token)
where Response : ResponseModel
where Request : RequestModel;
都一样吗
更新资料
声明通用参数不需要任何顺序,但是可以用看起来合理的方式编写它们,这是您的第一个示例(对我而言似乎更合逻辑)。
原版的
我正沿着这条花园的小路走去,完全误解了这个问题
您的调用代码无法切换通用参数,因为您对该方法有约束。 在这种情况下,您唯一的选择是对同一方法进行不同的重载。
就是说,第一个通用参数期望使用您在约束中表示的RequestModel
类型,因此无法将其发送给ResponseModel。 例如
PerformSomeAction<SomeResponse,SomeRequest>()
您可以(但是)重载签名和通用参数
枫树
public class SwitchAroo
{
Task<Response> PerformSomeAction<Request, Response>(
Request request, string token)
where Response : ResponseModel
where Request : RequestModel { ... }
Task<Response> PerformSomeAction<Response, Request>(
Request request, string token)
where Response : ResponseModel
where Request : RequestModel { ... }
}
也只是为了好玩。 编译器将让您像这样(通常)重载,因为签名根本不同
static Task<U> PerformSomeAction<T, U>(
T request, string token) { ... }
static Task<U> PerformSomeAction<U, T>(
T request, string token) { ... }
但这不是这样,因为签名本质上是相同的(如果可以的话,会引发各种奇怪的重载解决问题)
static Task<U> PerformSomeAction<T, U>(
T request, string token) { ... }
static Task<U1> PerformSomeAction<T1, U1>(
T1 request, string token) { ... }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.