c# 使用空合并运算符 ??时,一定要用小括号
decimal a =1000; decimal? b =0; decimal? c =100; var d = a - b ?? 0 - c ?? 0;
先看以上代码,最终d的值是多少?
不是900,而是1000
为什么呢?
因为运算符优先级陷阱:减号(-)优先级高于空合并运算符(??)
导致实际计算逻辑被理解为:
var d= (a- b) ?? (0 - c) ?? 0;
处理方案:
通过括号明确运算顺序,强制先处理空值:
var d = a - (b ?? 0) - (c ?? 0);
浙公网安备 33010602011771号