在 ReadFromJsonAsync 之后从可空变为不可空
Go from nullable to non-nullable after ReadFromJsonAsync
ReadFromJsonAsync
方法 returns 可空 T。这是一个代码示例:
private async Task<T> Get<T>(Uri url, CancellationToken cancellationToken)
{
using HttpResponseMessage response = await _httpClient.GetAsync(url, cancellationToken);
T? body = await response.Content.ReadFromJsonAsync<T>(cancellationToken: cancellationToken);
return body ?? throw new Exception();
}
我希望我的方法 return 不可空值。
我想知道 ReadFromJsonAsync
何时会 return 无效。无论我如何尝试,我仍然得到所有属性都为 null 的 T 实例。所以我希望这样写代码是安全的:
return (T)body;
但现在我收到警告正在将 null 文字或可能的 null 值转换为不可为 null 的类型。
怎么样,这个主意好吗:
return body!;
ReadFromJsonAsync
是一种实用方法,它获取响应的内容流,然后将其传递给 JsonSerializer.DeserializeAsync
.
DeserializeAsync
被定义为 return 可空值,因为它 可能 return 为空。如果您尝试反序列化 null
JSON 值,它将这样做。
如果您不期望这些,则可以使用 !
忽略警告。但最安全的方法是确实检查 null 并抛出异常或 return 后备值。
ReadFromJsonAsync
方法 returns 可空 T。这是一个代码示例:
private async Task<T> Get<T>(Uri url, CancellationToken cancellationToken)
{
using HttpResponseMessage response = await _httpClient.GetAsync(url, cancellationToken);
T? body = await response.Content.ReadFromJsonAsync<T>(cancellationToken: cancellationToken);
return body ?? throw new Exception();
}
我希望我的方法 return 不可空值。
我想知道 ReadFromJsonAsync
何时会 return 无效。无论我如何尝试,我仍然得到所有属性都为 null 的 T 实例。所以我希望这样写代码是安全的:
return (T)body;
但现在我收到警告正在将 null 文字或可能的 null 值转换为不可为 null 的类型。
怎么样,这个主意好吗:
return body!;
ReadFromJsonAsync
是一种实用方法,它获取响应的内容流,然后将其传递给 JsonSerializer.DeserializeAsync
.
DeserializeAsync
被定义为 return 可空值,因为它 可能 return 为空。如果您尝试反序列化 null
JSON 值,它将这样做。
如果您不期望这些,则可以使用 !
忽略警告。但最安全的方法是确实检查 null 并抛出异常或 return 后备值。