C#:如何接受两个通用参数

Nih*_*rma 4 c# generics

我有一个函数,我想将下面的Ping和Pong转换为泛型类型.可能吗?

private Pong ReadDataFromApi(string url, Ping data)
{
    string url = "URL_TO_HIT";

    WebResponse response = Util.SendWebRequest<Ping>(url, data, 30000);

    var res = new Pong();
    if (response != null)
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var objText = reader.ReadToEnd();
            res = JsonConvert.DeserializeObject<Pong>(objText);
        }
    }
    return res;
}
Run Code Online (Sandbox Code Playgroud)

我可以转换成以下内容:

private T ReadDataFromApi(string url, T data)  T : class
{
    string url = "URL_TO_HIT";

    WebResponse response = Util.SendWebRequest<T>(url, data, 30000);

    var res = new Pong();
    if (response != null)
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var objText = reader.ReadToEnd();
            res = JsonConvert.DeserializeObject<Pong>(objText);
        }
    }
    return res;
}
Run Code Online (Sandbox Code Playgroud)

不确定如何接受Pong作为通用参数.

Yac*_*sad 7

这样的事情应该有效:

private TPong ReadDataFromApi<TPing, TPong>(string url, TPing data)
    where TPing : class
    where TPong : class,new() //You need to create instances of TPong
{
    WebResponse response = Util.SendWebRequest<TPing>(url, data, 30000);

    var res = new TPong(); //Create instance of TPong
    if (response != null)
    {
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            var objText = reader.ReadToEnd();
            res = JsonConvert.DeserializeObject<TPong>(objText);
        }
    }

    return res;
}
Run Code Online (Sandbox Code Playgroud)