我目前正在将Blazor项目迁移到C#10附带的.NET6。在新的语言版本中,我收到了以下代码的警告:
if (tmp is null)
oldValue = "";
else
oldValue = tmp.ToString();
警告是:CS8600";将null文字或可能的null值转换为不可为null的类型";。CCD_ 1是CCD_。这就是我在if子句中检查它是否为null的原因。我注意到出现了许多这种类型的警告。
那么这背后的原因是什么呢?"帮助"页面尚未包含任何信息。(见此处(
当编译器不确定类型是否可以为null时,似乎会引发CS8600警告。如果您将oldValue=(string?(tmp;编译器很高兴,警告就消失了。
您可以使用Coalesce运算符(使用@Alex Kalabukhov校正编辑(:
string oldValue = tmp?.ToString() ?? "Tmp to string is null";
如果不是NULL,则此表达式将oldValue变量设置为tmp.ToString()
;如果为NULL,则将tmp = "Tmp to string is null
。
参考文献:
- Microsoft文档
- 这个页面是西班牙语的,但它比官方文件解释得更好
您必须强制转换为不可为null的,就像这个
int? tmp = 0;
string oldValue = tmp == null ? "" : ((int)tmp).ToString();
或使用您的语法
string oldValue;
if (tmp is null)
oldValue = "";
else
oldValue = ((int) tmp).ToString();
在文件资源管理器中,应该有一个扩展名为.csproj的文件。在第7行可以找到选项nullable,写disable
而不是enable
。正确的文件