gpt4 book ai didi

c# - 类型转换简单的通用对象

转载 作者:行者123 更新时间:2023-11-30 14:12:58 26 4
gpt4 key购买 nike

我创建了一个方法来简化 HttpClient 调用的使用。它使用 HttpReponse.Content.ReadAsAsync().Result 方法从 API 获取响应。

一切正常。我的方法看起来像这样:

    public static T ExecuteAPIGetRequest<T>(string url, Dictionary<string, string> parameters)
{

HttpClient client = new HttpClient();
//basic authentication

var t = new object();
string baseURL = "myurl";

//Execute request
HttpResponseMessage response = client.GetAsync(baseURL).Result;

if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<T>().Result;
}
else
{
return (T)t;
}
}

我的问题是,如果查询失败,它需要返回一个空类型的 T。如果它是我编写的自定义类,这很好,但它不适用于 string 或 string[] 等对象。有什么想法吗?

干杯

国家安全委员会

最佳答案

尝试返回default(T)

if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<T>().Result;
}
else
{
return default(T);
}

default将为引用类型返回 null,并将数值 intdouble 等归零,并为自定义 struct< 返回相应的默认值enum

Daniel 友善地指出了一个问题:如果对于引用类型你想返回default object 而不是null,你应该定义泛型约束new T()。现在您可以使用调用无参数构造函数来实例化 T 类型的对象。完整方法如下:

public static T ExecuteAPIGetRequest<T>(string url, 
Dictionary<string, string> parameters)
where T : new()
{

HttpClient client = new HttpClient();

//basic authentication

string baseURL = "myurl";

HttpResponseMessage response = client.GetAsync(baseURL).Result;

if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<T>().Result;
}
else
{
return new T(); //returns an instance, not null
}
}

现在您将返回引用类型的默认对象,而不是 null。开放类型T只能取类型,默认有构造函数(无参数)

关于c# - 类型转换简单的通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com