【发布时间】:2021-12-07 10:14:59
【问题描述】:
我目前正在将 Blazor 项目迁移到 C# 10 附带的 .NET6。 使用新语言版本时,我收到以下代码的警告:
if (tmp is null)
oldValue = "";
else
oldValue = tmp.ToString();
警告是:CS8600“将空文字或可能的空值转换为不可为空的类型”。
tmp 的类型为 object?。这就是我在 if 子句中检查它是否为空的原因。
我注意到出现了许多此类警告。
那背后的原因是什么?帮助页面尚不包含任何信息。 (见here)
【问题讨论】:
-
object.ToString有string?返回类型。试试oldValue = tmp?.ToString() ?? "" -
关于为什么
object.ToString()被注释为返回string?而不是string的激动人心的讨论,请参见此处:github.com/dotnet/coreclr/pull/23466 -
@Satpal
is总是检查null而==可能调用重载运算符 -
@UnusualWays 您的 IDE 是否建议进行任何自动重构?在 Visual Studio 中,您也许可以单击一个灯泡并让 IDE 解决问题。
-
@JL0PD - 您可以将第一条评论作为答案。