【发布时间】:2016-06-16 21:16:33
【问题描述】:
我无法在此泛型类型 T 上返回 null。我尝试将其标记为 Nullable、Nullable 或 T?没有成功...
此方法是抽象类的一部分,我需要使其尽可能通用,以便检索任何类型的对象并从任何派生类中使用它。
public T GetFromApi<T>(string apiRequest, string content)
{
try
{
log.Debug("Requesting '" + apiRequest + "' from API with the following parameters: " + content);
_httpClient.DefaultRequestHeaders.Accept.Clear();
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_httpClient.DefaultRequestHeaders.Add("Authorization", string.Format("{0} {1}", _token.token_type, _token.access_token));
var httpContent = new StringContent(content);
HttpResponseMessage response = _httpClient.GetAsync(apiRequest).Result;
if (response.IsSuccessStatusCode)
{
//Returns requested Object (T) from API
log.Info("Returning requested object " + typeof(T).ToString());
return response.Content.ReadAsAsync<T>().Result;
}
else
{
log.Error("Error accessing API.");
return null;
}
}
catch (Exception ex)
{
log.Fatal("Error accessing API.", ex);
throw ex;
}
}
else 语句上的 return null 给了我错误:
无法将 null 转换为类型参数 'T'
【问题讨论】:
-
返回
default(T)怎么样? -
顺便说一句:您应该更喜欢
throw;而不是throw ex;以保留原始异常的堆栈跟踪。 -
tnks @UweKeim.. 解决了...
-
问题已经得到解答,但另一种可行的方法是抛出自定义异常,而不是返回任何内容。否则,调用者应该如何知道出了什么问题——他们是否需要根据
null检查每个值?如果T是int,他们是否需要检查0?如果0也是有效值怎么办? -
@UweKeim 我会的……谢谢
标签: c# nullable return-type