空结合运算符

时间:2012-09-28 01:58:52

标签: c# null-coalescing-operator

我有以下代码:

decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;

由于ab都已填写,我希望c能够提供 4 的结果。

但是,我得到的结果是 2 ,在这种情况下,b被视为 1 而不是 2 。< / p>

有谁知道这种行为背后的原因是什么?

3 个答案:

答案 0 :(得分:5)

如果要获取4

的值,请

对值条件进行分组

decimal c = (a ?? 1m) * (b ?? 1m);

您当前的语法评估为

decimal c = a ?? (1m * b ?? 1m);

以及您获得2a )值的原因

答案 1 :(得分:4)

表达式的作用如下:

decimal c = a ?? (1m * b) ?? 1m;

由于a有一个值,你可以得到它。

答案 2 :(得分:3)

decimal c = a ?? 1m * b ?? 1m;

等于:

if (a != null)
    c = a
else
    ...

在您的情况下,a不为空且值为2,因此这就是结果。