返回空 T
Returning null T
我在 return 对此泛型类型 T 设置 null 时遇到问题。我试过将其标记为 Nullable、Nullable 或 T?没有成功...
此方法是抽象 class 的一部分,我需要使其尽可能通用,以便我可以检索任何类型的对象并从任何派生的对象中使用它 class.
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 给出了错误:
Cannot convert null to type parameter 'T'
如果传入的类型是结构,则 Null 可能不是 T
的可行值。
您可以改为 return T
的默认类型,其引用类型为空:
else
{
log.Error("Error accessing API.");
return default(T);
}
如以下评论所述,如果将 T
限制为 class
,则可以选择 return null。
public T GetFromApi<T>(string apiRequest, string content) where T : class
...
else
{
log.Error("Error accessing API.");
return null;
}
但是,如果您确实需要检索基本类型(bool、int 等),您将无法再使用此方法。
我在 return 对此泛型类型 T 设置 null 时遇到问题。我试过将其标记为 Nullable、Nullable 或 T?没有成功...
此方法是抽象 class 的一部分,我需要使其尽可能通用,以便我可以检索任何类型的对象并从任何派生的对象中使用它 class.
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 给出了错误:
Cannot convert null to type parameter 'T'
如果传入的类型是结构,则 Null 可能不是 T
的可行值。
您可以改为 return T
的默认类型,其引用类型为空:
else
{
log.Error("Error accessing API.");
return default(T);
}
如以下评论所述,如果将 T
限制为 class
,则可以选择 return null。
public T GetFromApi<T>(string apiRequest, string content) where T : class
...
else
{
log.Error("Error accessing API.");
return null;
}
但是,如果您确实需要检索基本类型(bool、int 等),您将无法再使用此方法。