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);
posted @ 2025-03-05 15:13  蜀南蓝玉  阅读(15)  评论(0)    收藏  举报