我只是想知道为什么以下代码不起作用(请记住,我设置age
为可空):
myEmployee.age = conditionMet ? someNumber : null;
然而,以下工作正常:
if(conditionMet)
{
myEmployee.age = someNumber;
}
else
{
myEmployee.age = null;
}
为什么我不能在条件运算符中将值设置为 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;
三元语句各部分的类型必须隐式转换为公共基础。在 和 的情况下int
,null
它们不是。您可以通过制作age
( Nullable<int>
or int?
) 并转换someNumber
为int?
.
编辑澄清:您可以null
使用正确转换的三元语句将值设置为。这里的问题不在于您尝试null
使用三元语句设置值。这是三元语句中涉及的两个表达式的编译器推断的返回类型不能隐式转换为公共基类型。