我有一种情况需要在通用声明中动态确定对象的类型(编译时间很好)。
我有这样的方法:
private async Task<T> Post<T>(string path, Request data)
{
var authPath = GetAuthenticatedPath(path);
var response = await _client.PostAsJsonAsync<Request>(authPath, data);
return response;
}
问题是我真的需要它更像这样操作:
private async Task<T> Post<T>(string path, Request data)
{
var authPath = GetAuthenticatedPath(path);
var response = await _client.PostAsJsonAsync<data.GetType()>(authPath, data);
return response;
}
因为我需要它来格式化数据变量,因为它是ActualRequestType而不是转换为JSON时的Request类型。问题是你不能在类型声明中执行data.GetType()。
答案 0 :(得分:4)
将您的签名修改为:
private async Task<T> Post<T, TRequest>(string path, TRequest data)
where TRequest : Request
{
var authPath = GetAuthenticatedPath(path);
var response = await _client.PostAsJsonAsync<TRequest>(authPath, data);
return response;
}
条件将确保您仍然收到有效的Request
个对象,并且实际类型将继续进行PostAsJsonAsync
来电。
答案 1 :(得分:0)
方法PostAsJsonAsync返回Task<HttpResponseMessage>
所以你可能不需要返回泛型,只能得到这样的
private async Task<HttpResponseMessage> Post<T>(string path, T data)
{
var authPath = GetAuthenticatedPath(path);
var response = await _client.PostAsJsonAsync<T>(authPath, data);
return response;
}