C#10 CS8600警告不清楚



我目前正在将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

参考文献:

  1. Microsoft文档
  2. 这个页面是西班牙语的,但它比官方文件解释得更好

您必须强制转换为不可为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。正确的文件

相关内容

  • 没有找到相关文章

最新更新