我只是想知道为什么以下代码不起作用(请记住我将age
设置为可为空):
myEmployee.age = conditionMet ? someNumber : null;
然而以下工作正常:
if(conditionMet)
{
myEmployee.age = someNumber;
}
else
{
myEmployee.age = null;
}
为什么我不能在条件运算符中将值设置为null?我代码中的所有这些if
语句都不好。
感谢。
答案 0 :(得分:15)
双方的类型必须相同(或可隐式兑换):
myEmployee.age = conditionMet ? someNumber : (int?)null;
来自docs:
first_expression和second_expression的类型必须是 相同,或者必须存在从一种类型到另一种类型的隐式转换。
答案 1 :(得分:8)
您可以,只需明确null
应解释为的类型:
myEmployee.age = conditionMet ? someNumber : (int?)null;
答案 2 :(得分:2)
看看文档的内容:
[MSDN]可空类型变量的默认值将HasValue设置为false。价值未定义。
默认为null
。这意味着你可以做到:
if (conditionMet)
myEmployee.age = someNumber;
不需要更复杂的代码语法。
如果需要,您可以提前使用null
初始化它,如果它不是默认值,就像这样:
myEmployee.age = null;
if (conditionMet)
myEmployee.age = someNumber;
答案 3 :(得分:0)
三元语句的各个部分的类型必须可隐式地转换为公共基础。在int
和null
的情况下,他们并非如此。您可以通过age
Nullable<int>
(或int?
)并将someNumber
转换为int?
来解决此问题。
编辑澄清:您可以使用适当的强制转换的三元语句将值设置为null
。这里的问题不是您尝试使用三元语句将值设置为null
。这是因为三元语句中涉及的两个表达式的编译器推断返回类型不能隐式地转换为公共基类型。