2012-09-28 66 views
4

我有以下代码:空 - 结合运营商

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

由于两个ab已经被填入,我期待c给我的结果。

但是,结果我得到的是,在这种情况下b取为代替。

有谁知道背后的原因是什么?为什么你的2

回答

4

表达工作原理:

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

由于a有一个值,你得到的。

5

组,如果你想获得4

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

当前的语法的值值条件为

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

和原因进行评估(为对于a

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

等于:

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

在你的情况a不为空并且具有2的值,因此这就是结果。