警告 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.
您有两个选择:
- 在您的应用程序中禁用可为空的引用类型。在您的 csproj 中将 Nullable 节点设置为禁用,请参阅 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/nullable-reference-types
- 或将 JsonSerializer.Deserialize 的结果分配给可为 null 的 property/field。 (GetUserById?user = null; 而不是 GetUserById user = null;)
但是我尝试得到以下警告。
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);
//}
看了一些帖子,比如
更新。
我完全删除了 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.
您有两个选择:
- 在您的应用程序中禁用可为空的引用类型。在您的 csproj 中将 Nullable 节点设置为禁用,请参阅 https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/nullable-reference-types
- 或将 JsonSerializer.Deserialize 的结果分配给可为 null 的 property/field。 (GetUserById?user = null; 而不是 GetUserById user = null;)