警告 CS8600 将 null 文字或可能的 null 值转换为不可为 null 的类型

Warning CS8600 Converting null literal or possible null value to non-nullable type

但是我尝试得到以下警告。

Severity Code Description Project File Line Suppression State Warning CS8600 Converting null literal or possible null value to non-nullable type.

代码如下

HttpResponseMessage response = await _httpClient.PutAsync(url, requestContent);
string? userResponse = await response.Content.ReadAsStringAsync();
JsonSerializerOptions? options = new JsonSerializerOptions
{
  PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};

//if (userResponse.Length > 0)
//{
  user = JsonSerializer.Deserialize<GetUserById>(userResponse, options);
//}

看了一些帖子,比如 and ,但不知道如何解决。

更新。

我完全删除了 if 条件,但仍然收到警告。

更新 2

按照建议添加了空检查。但仍然收到警告。

我相信它是在警告您 userResponse 为空,需要检查它是否为空状态。如果您执行 null 检查警告应该消失。

为您做这件事 userResponse.Length 试试这个:

HttpResponseMessage response = await _httpClient.PutAsync(url, requestContent);
var userResponse = (string?)null;
userResponse = await response.Content.ReadAsStringAsync();
JsonSerializerOptions? options = new JsonSerializerOptions
{
  PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};

if (userResponse != null)
{
  user = JsonSerializer.Deserialize<GetUserById>(userResponse, options);
}

JsonSerializer.Deserializereturns可为空的 GetUserById。您正在将可空值分配给不可空值 field/property.

您有两个选择: