乐宁工具

C# 运算符对照表

免费使用 超详细版 可复制

C# 运算符完整速查表,涵盖算术、关系、逻辑、位运算、赋值、空合并 ??、空条件 ?.、Lambda =>、模式匹配 is/switch、类型转换、优先级等全部内容,每条均配示例与结果说明。

分类运算符名称示例代码结果说明 / 注意事项
算术运算符
+加法 / 字符串拼接int a = 3 + 2; // 5string s = "hi" + "!"; // "hi!"数值相加;字符串拼接(仅 + 号)
-减法int a = 5 - 3;2
*乘法int a = 4 * 3;12
/除法double a = 7 / 3;2.333...(操作数有double)整数除法截断:7/3=2;至少一个double才保留小数
%取模int a = 7 % 3;1结果符号与被除数相同
++自增int a=5; a++;6前缀先加后用,后缀先用后加
--自减int a=5; a--;4
关系运算符
==等于5 == 5true值类型比较值;引用类型比较引用(string 除外,已重载)
!=不等于5 != 3true
>大于5 > 3true
<小于3 < 5true
>=大于等于5 >= 5true
<=小于等于3 <= 5true
逻辑运算符
&&条件与(短路)true && falsefalse左为 false 时右表达式不执行
||条件或(短路)true || falsetrue左为 true 时右表达式不执行
!逻辑非!truefalse
&逻辑与(非短路)true & falsefalse无论左值,右表达式都执行
|逻辑或(非短路)true | falsetrue
^逻辑异或true ^ truefalse两操作数相同为 false
位运算符
&按位与5 & 3 // 0101 & 00111对应位都为1才为1
|按位或5 | 37
^按位异或5 ^ 36
~按位取反~5-6补码表示
<<左移5 << 110左移 n 位 = 乘以 2^n
>>右移(带符号)-8 >> 1-4保留符号位
赋值运算符
=赋值int a = 10;a=10
+=加等a += 3;a = a+3
-=减等a -= 3;a = a-3
*=乘等a *= 3;a = a*3
/=除等a /= 3;a = a/3
%=模等a %= 3;a = a%3
&= |= ^=位运算赋值a &= 3;a = a&3
<<= >>=位移赋值a <<= 1;a = a<<1
三元运算符
? :条件(三目)var max = a > b ? a : b;返回较大值可嵌套,建议不超过一层
空合并运算符
??空合并string s = name ?? "匿名";name 为 null 时取 "匿名"C# 2.0 引入,仅对 null 生效(不同于 ||)
空合并赋值
??=空合并赋值name ??= "匿名";name 为 null 时才赋值C# 8.0 引入
空条件运算符
?.空条件访问obj?.Namenull(安全)左侧为 null 时短路返回 null,不抛 NullReferenceException
?[]空条件索引arr?[0]null(安全)数组空条件访问
Lambda运算符
=>Lambda / 表达式体x => x * 2委托 / 表达式树Lambda 表达式;也用于方法表达式体
=>属性表达式体public int X => _x;只读属性C# 6.0 属性简写
模式匹配
is类型模式x is int itrue/false,匹配成功 i 获得值C# 7.0+ 模式匹配
is属性模式x is { Age: > 18 }true/falseC# 8.0+ 属性模式
switchSwitch 表达式var r = x switch { 1=>"一", _=>"其他" };"一" 或 "其他"C# 8.0 Switch 表达式,比传统 switch 更简洁
类型转换
(T)强制转换int a = (int)3.14;3溢出抛 InvalidCastException
as安全转换obj as stringnull(失败不抛异常)仅适用于引用类型和可空类型
is类型检查obj is stringtrue/false
其他
new创建实例var s = new StringBuilder();新对象
typeof获取类型typeof(int)System.Type 对象编译时确定类型
nameof获取名称nameof(User.Name)"Name"C# 6.0,重构安全
await / async异步await Task.Delay(1000);异步等待异步编程关键字
checked / unchecked溢出检查checked(int.MaxValue+1)抛 OverflowException默认 unchecked,可用 /checked 编译选项
优先级(高→低)
() . [] x++ x--最高方法调用、成员访问先算
++ -- (T) ! ~单目前缀!flag / ~a先算
* / %乘除模a*b/c高于加减
+ -加减a+b-c
<< >>位移a<<2
< <= > >= is as关系/类型a>b
== !=相等a==b
&按位与a&b
^按位异或a^b
|按位或a|b
&&条件与a&&b
||条件或a||b
??空合并a??b右结合
? :三元a?b:c
优先级(最低)
= += -= 等赋值a=b=c最低从右向左结合

C# 运算符注意事项

  • ?? 仅对 null 生效(值类型需为可空类型),|| 在 C# 中仅用于 bool
  • ?. 空条件运算符是避免 NullReferenceException 的最有效手段
  • as 转换失败返回 null,不抛异常;(T) 强转失败抛 InvalidCastException
  • • 整数除法 / 截断小数,需要小数结果时至少一个操作数为 double/decimal
  • checked 上下文检测溢出,默认 unchecked;可用 /checked 编译选项全局开启
  • is 模式匹配(C# 7+)可同时做类型检查和变量赋值:x is int i
  • switch 表达式(C# 8+)返回值,比传统 switch 语句更函数式
  • => Lambda 与表达式体成员不要与 = 赋值混淆

?. 防空

obj?.Prop 为 null 时返回 null 而非抛异常,可链式调用

?? 空合并

name ?? "匿名" 简洁替代三元;??= 仅 null 时赋值

模式匹配

is 类型模式、属性模式、switch 表达式让分支代码更简洁

=> Lambda

Lambda 表达式、属性/方法表达式体,代码更紧凑