返回空 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 等),您将无法再使用此方法。