可为空整数 - 为什么它不抛出异常?

问题描述 投票:0回答:1

我不确定这是一个错误还是有意为之,但我希望这里有人能更多地了解为什么会发生这种情况。

考虑这段代码

var someMetric = GetMetric(); // returns 3000
var someNullableMetric = GetNullableMetric(); // returns null

// Doesn't work
var total = someMetric + someNullableMetric; // why does this return null and not throw an error?
var Total = someMetric + someNullableMetric ?? 0; // why is '+' done prior to '??'

// Works
var Total = someMetric + (someNullableMetric ?? 0); // this understandably works

只是寻找一个解释,因为这个功能是完全出乎意料的,空合并运算符不属于 BODMAS,所以我会假设它会首先执行(尽管最后一种现在我正在输入它更有意义)?或者尝试将 null 添加到值时会引发异常。

c# .net .net-core
1个回答
0
投票

这绝对是预期的设计:

由于

提升了运算符

someMetric + someNullableMetric
评估为 null。如果您想强制例外,您可以随时使用
someMetric + someNullableMetric.Value
来代替。

someMetric + someNullableMetric ?? 0
等同于
(someMetric + someNullableMetric) ?? 0
,因为
+
优先级 高于
??

如果您想要例外,请使用

someNullableMetric.Value
。如果您不想要例外,请根据问题代码的最后一行使用
(someNullableMetric ?? 0)

© www.soinside.com 2019 - 2024. All rights reserved.