【发布时间】:2012-09-19 21:36:57
【问题描述】:
我有以下代码:
decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
由于a 和b 都已填写,我期待c 给我4 的结果。
但是,我得到的结果是 2,在这种情况下,b 被视为 1 而不是 2。
有谁知道这种行为背后的原因是什么?
【问题讨论】:
标签: c# null-coalescing-operator
我有以下代码:
decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
由于a 和b 都已填写,我期待c 给我4 的结果。
但是,我得到的结果是 2,在这种情况下,b 被视为 1 而不是 2。
有谁知道这种行为背后的原因是什么?
【问题讨论】:
标签: c# null-coalescing-operator
如果要获取4的值,对值条件进行分组
decimal c = (a ?? 1m) * (b ?? 1m);
你当前的语法被评估为
decimal c = a ?? (1m * b ?? 1m);
以及你得到2值的原因(至于a)
【讨论】:
表达式如下:
decimal c = a ?? (1m * b) ?? 1m;
因为a 有一个值,所以你明白了。
【讨论】:
decimal c = a ?? 1m * b ?? 1m;
等于:
if (a != null)
c = a
else
...
在您的情况下,a 不为 null 并且具有 2 的值,所以这就是结果。
【讨论】: