C# 7.5/9.0 运算符优先级完整汇总查询及示例优先级求解
C# 运算符优先级说明及完整对照表
代码优先级解析
你提供的代码string c = a ?? string.Empty + "example";中,加法运算符+的优先级高于空合并运算符??,因此实际运算顺序等价于:string c = a ?? (string.Empty + "example");
运算逻辑为:
- 当变量
a不为null时,直接返回a的值赋值给c,不会执行后面的字符串拼接逻辑 - 当变量
a为null时,才会先执行string.Empty + "example"得到结果"example",再赋值给c
如果你预期的逻辑是a为null时取空字符串再拼接"example",需要手动加括号调整优先级:string c = (a ?? string.Empty) + "example";
最新版C#完整运算符优先级对照表(按优先级从高到低排序)
- 主运算符:
x.y、f(x)、a[i]、x?.y、x?[i]、x++、x--、new、typeof、checked、unchecked、default、nameof、delegate、sizeof、stackalloc、x->y - 一元运算符:
+x、-x、!x、~x、++x、--x、^x、(T)x、await、&x、*x、true、false - 范围运算符:
.. - 乘法类运算符:
x * y、x / y、x % y - 加法类运算符:
x + y、x - y - 移位运算符:
x << y、x >> y、x >>> y - 关系和类型测试运算符:
x < y、x > y、x <= y、x >= y、is、as - 相等运算符:
x == y、x != y - 逻辑与运算符:
x & y - 逻辑异或运算符:
x ^ y - 逻辑或运算符:
x | y - 条件与运算符:
x && y - 条件或运算符:
x || y - 空合并运算符:
x ?? y - 条件运算符:
x ? y : z - 赋值和lambda运算符:
=、x += y、x -= y、x *= y、x /= y、x %= y、x &= y、x |= y、x ^= y、x <<= y、x >>= y、x >>>= y、x ??= y、=>
内容的提问来源于stack exchange,提问作者kiafiore
相关产品推荐
相关产品推荐

