4

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

myEmployee.age = conditionMet ? someNumber : null;

然而,以下工作正常:

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

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

谢谢。

4

4 回答 4

18

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

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

文档

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

于 2012-04-23T15:13:58.887 回答
8

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

myEmployee.age = conditionMet ? someNumber : (int?)null; 
于 2012-04-23T15:14:02.073 回答
2

看看文档是怎么说的:

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

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

if (conditionMet)
    myEmployee.age = someNumber;

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


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

myEmployee.age = null;

if (conditionMet)
    myEmployee.age = someNumber;
于 2012-04-23T15:16:07.427 回答
0

三元语句各部分的类型必须隐式转换为公共基础。在 和 的情况下intnull它们不是。您可以通过制作age( Nullable<int>or int?) 并转换someNumberint?.

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

于 2012-04-23T15:16:30.820 回答