声明返回Task<T>的C#异步方法为何可返回boolean类型?
public async Task<T> GetAsync(string url, int id) { var request = new HttpRequestMessage(HttpMethod.Get, url); var client = _clientFactory.CreateClient(); HttpResponseMessage response = await client.SendAsync(request); if (response.StatusCode == HttpStatusCode.OK) { var jsonString = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<T>(jsonString); } return null; }
原因解释
这个方法是泛型异步方法,声明中的T是可自定义的类型参数,只要没有额外的泛型约束,调用时可以指定T为任意合法的C#类型,布尔类型bool也包含在内:
- 当你调用方法时指定
T为bool,写法为await GetAsync<bool>("你的接口地址", 对应的id参数),此时方法的返回值类型就会变成Task<bool>,JsonConvert.DeserializeObject也会把接口返回的JSON内容反序列化为布尔值,最终返回的结果就是布尔类型。 - 注意当前代码存在适配问题:
bool属于值类型,不允许赋值为null,如果你指定T为bool时接口请求失败,代码中的return null会直接触发编译错误。如果需要兼容值类型的调用场景,可以把return null改成return default(T)(T为bool时默认返回false),或是给泛型添加where T : class约束限制仅支持引用类型,或是将返回值改为Task<T?>适配可空类型规则。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

