【发布时间】:2021-08-31 00:40:25
【问题描述】:
谁能向我解释为什么这个代码:
int? a = 54;
decimal b = a ?? 0 / 100m;
b 的值为 54 ?
但是如果我添加一些括号:
int? a = 54;
decimal b = (a ?? 0) / 100m;
它的值为0.54?
我不明白为什么会这样。因为a 的值是 54,我原以为?? 运算符什么也不做。
【问题讨论】:
-
操作员不能“什么都不做”。它必须评估为 something。你认为
b在这两种情况下会是什么? -
a ?? 0 / 100m是a ?? (0 / 100m)。(a ?? 0) / 100m当然是完全不同的东西。 -
顺便说一句(因为有很多回答已经回答了您的问题),但是如果您这样做,
decimal b = a.Value / 100m;将实现您尝试做的事情,减少对空合并运算符的依赖觉得很混乱。 -
您忽略了非常基本的 C# 功能:括号中的 highest priority 按计算顺序排列。
标签: c# null-coalescing-operator