C#.net 无法将 null 赋值给内联 if 语句中的变量

本文关键字:if 语句 变量 net 赋值 null | 更新日期: 2023-09-27 18:32:09

我只是想知道为什么以下代码不起作用(请记住,我将age设置为可为空):

myEmployee.age = conditionMet ? someNumber : null;

然而,以下工作正常:

if(conditionMet)
{
    myEmployee.age = someNumber;
}
else
{
    myEmployee.age = null;
}

为什么我不能在条件运算符中将值设置为 null?我的代码中的所有这些if语句都不好。

谢谢。

C#.net 无法将 null 赋值给内联 if 语句中的变量

两边的类型必须相同(或隐式可转换):

myEmployee.age = conditionMet ? someNumber : (int?)null;

从文档中:

first_expression和second_expression的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。

你可以,只要清楚null应该解释为的类型:

myEmployee.age = conditionMet ? someNumber : (int?)null; 

看看文档是怎么说的:

[MSDN] 可为空的类型变量的默认值将 HasValue 设置为 false。值未定义。

因此,默认值为 null 。这意味着您可以简单地执行以下操作:

if (conditionMet)
    myEmployee.age = someNumber;

不需要更晦涩的代码语法。


如果需要,您可以提前用null初始化它,如果它不是默认值,如下所示:

myEmployee.age = null;
if (conditionMet)
    myEmployee.age = someNumber;

三元语句的各个部分的类型必须隐式转换为公共基。 在intnull的情况下,它们不是。 您可以通过将age设为Nullable<int>(或int?)并将someNumber转换为int?来解决此问题。

编辑以澄清:您可以使用具有正确强制转换的三元语句将值设置为 null。 这里的问题不在于您尝试使用三元语句将值设置为null。 而是三元语句中涉及的两个表达式的编译器推断的返回类型不能隐式转换为公共基类型。