我想用这样的泛型参数创建泛型方法:
public class BaseResponse<T>
{
public ResponseReturnCode Code { get; set; }
public string Description { get; set; }
public T Data { get; set; }
}
public class LoginResponse : BaseResponse<LoginData>
private async Task<T> CreateResponse<T,U>(HttpResponseMessage responseMessage) where T : BaseResponse<U>
{
var responseBody = await responseMessage.Content.ReadAsStringAsync();
var responseDto = JsonConvert.DeserializeObject<T>(responseBody);
// Some additional stuff here but I am not need U type for that.
// I am only touching not generic part of BaseResponse here.
//...
return responseDto;
}
这是有效的:
var responseDto = await CreateResponse<LoginResponse, LoginData>(responseMessage);
private async Task<T> CreateResponse<T,U>(HttpResponseMessage responseMessage) where T : BaseResponse<U> {...}
我不想在调用此方法时指定内部类型“LoginData”。 但是这个声明不起作用:
var responseDto = await CreateResponse<LoginResponse>(responseMessage);
private async Task<T> CreateResponse<T>(HttpResponseMessage responseMessage) where T : BaseResponse<U> where U : class
{...}
“U”类型我未知...
这也不起作用:
var responseDto = await CreateResponse<LoginResponse>(responseMessage);
private async Task<T> CreateResponse<T>(HttpResponseMessage responseMessage) where T : BaseResponse<object>
{...}
在 Java 中,我可以使用通配符,但在 c# 中很容易解决这个问题?