C#10 不清楚的 CS8600 警告

Unu*_*ays 13 c# blazor c#-10.0

我目前正在将 Blazor 项目迁移到 C# 10 附带的 .NET6。使用新语言版本时,我收到包含以下代码的警告:

if (tmp is null)
    oldValue = "";
else
    oldValue = tmp.ToString();
Run Code Online (Sandbox Code Playgroud)

警告是:CS8600“将 null 文字或可能的 null 值转换为不可为 null 的类型”。 tmp属于 类型object?。这就是我在 if 子句中检查它是否为空的原因。我注意到出现了很多这种类型的警告。

那么这背后的原因是什么呢?帮助页面尚不包含任何信息。(看这里

Jim*_*les 7

当编译器不确定类型是否可为空时,似乎会引发 CS8600 警告。如果你投射 oldValue = (string?) tmp; 编译器很高兴并且警告消失了。