可为Null,结果令人惊讶
本文关键字:结果 Null 可为 | 更新日期: 2023-09-27 18:21:15
什么打印这个程序?
static void Main(string[] args)
{
int? other = null;
int value = 100 + other ?? 0;
Console.WriteLine(value);
}
我知道我脑子里没有语言规范。但令人惊讶的是,它打印的是0而不是100。这种奇怪的行为有合理的解释吗?
当我使用大括号时,我会得到正确的结果。
static void Main(string[] args)
{
int? other = null;
int value = 100 + (other ?? 0);
Console.WriteLine(value);
}
当前表达式的计算结果为:
(100 + other) ?? 0;
other
的值为null,数字加上null仍然为null。因此表达式输出0。
在第二个示例中,您首先评估空校验,然后添加100。
由于plus(+)
运算符的优先级高于Null Coalescing Operator
??
,因此结果为0。因此,您的表达式被评估为:
(100 + other) ?? 0;
其返回0。
在第二种情况下,您首先计算表达式(其他??0),使其具有更高的优先级。因此,你得到了正确的或预期的结果。
这里明确定义了C#运算符的优先级。
我们可以看到,
x+y–加法。
是第29位,
x??y–如果x为非空,则返回x;否则,返回y.
是第46位,因此在零聚结之前评估添加剂添加。
关于这背后的原因的猜测是本网站的主题,也是一个更深层次的问题。这里的答案可能是主观的,即使有技术小组的直接输入,完整的答案也会比几段更长。