TOut类型必须是引用类型,才能在通用方法类型中用作参数T

时间:2019-04-02 16:16:05

标签: c#

我具有解析json响应的通用方法,但是当我尝试在我的方法中调用它时,我收到一个错误“ Type TOut必须是引用类型,才能将其用作通用中的参数T方法类型”。请帮忙,让我知道如何调用通用方法。

private static T TryParse<T>(string input, T defaultVal = default(T)) where T : class
    {
        try
        {
            var result = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(input);
            return result;
        }
        catch (Exception)
        {
            return defaultVal;
        }
    }

public async Task<Tuple<bool, string, TOut>> GetAsync<TOut>(
        Func<string, bool> successTest = null,
        Dictionary<string, string> parameters = null)
    {
        var result = await GetAsync(parameters);
        var response = await GetResponseContentAsync(result.Content);
        var responseObj = TryParse<TOut>(response);


        return Tuple.Create(true, response, responseObj);
    }

1 个答案:

答案 0 :(得分:3)

您的TryParse<T>方法说T必须是一个类(where T : class)。您的GetAsync<TOut>方法使T成为任何东西-对此没有限制。

但是,调用TOutT用作TryParse。这就是问题所在-TOut可以是任何东西,但是T只能是一个类。

where T : class中删除TryParse限制,或将其添加到GetAsyncwhere TOut : class)中。您要做什么取决于您的要求。