C# 运算符对照表
免费使用
超详细版
可复制
C# 运算符完整速查表,涵盖算术、关系、逻辑、位运算、赋值、空合并 ??、空条件 ?.、Lambda =>、模式匹配 is/switch、类型转换、优先级等全部内容,每条均配示例与结果说明。
| 分类 | 运算符 | 名称 | 示例代码 | 结果 | 说明 / 注意事项 |
|---|---|---|---|---|---|
| 算术运算符 | |||||
| + | 加法 / 字符串拼接 | int a = 3 + 2; // 5 | string 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 == 5 | true | 值类型比较值;引用类型比较引用(string 除外,已重载) | |
| != | 不等于 | 5 != 3 | true | ||
| > | 大于 | 5 > 3 | true | ||
| < | 小于 | 3 < 5 | true | ||
| >= | 大于等于 | 5 >= 5 | true | ||
| <= | 小于等于 | 3 <= 5 | true | ||
| 逻辑运算符 | |||||
| && | 条件与(短路) | true && false | false | 左为 false 时右表达式不执行 | |
| || | 条件或(短路) | true || false | true | 左为 true 时右表达式不执行 | |
| ! | 逻辑非 | !true | false | ||
| & | 逻辑与(非短路) | true & false | false | 无论左值,右表达式都执行 | |
| | | 逻辑或(非短路) | true | false | true | ||
| ^ | 逻辑异或 | true ^ true | false | 两操作数相同为 false | |
| 位运算符 | |||||
| & | 按位与 | 5 & 3 // 0101 & 0011 | 1 | 对应位都为1才为1 | |
| | | 按位或 | 5 | 3 | 7 | ||
| ^ | 按位异或 | 5 ^ 3 | 6 | ||
| ~ | 按位取反 | ~5 | -6 | 补码表示 | |
| << | 左移 | 5 << 1 | 10 | 左移 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?.Name | null(安全) | 左侧为 null 时短路返回 null,不抛 NullReferenceException | |
| ?[] | 空条件索引 | arr?[0] | null(安全) | 数组空条件访问 | |
| Lambda运算符 | |||||
| => | Lambda / 表达式体 | x => x * 2 | 委托 / 表达式树 | Lambda 表达式;也用于方法表达式体 | |
| => | 属性表达式体 | public int X => _x; | 只读属性 | C# 6.0 属性简写 | |
| 模式匹配 | |||||
| is | 类型模式 | x is int i | true/false,匹配成功 i 获得值 | C# 7.0+ 模式匹配 | |
| is | 属性模式 | x is { Age: > 18 } | true/false | C# 8.0+ 属性模式 | |
| switch | Switch 表达式 | var r = x switch { 1=>"一", _=>"其他" }; | "一" 或 "其他" | C# 8.0 Switch 表达式,比传统 switch 更简洁 | |
| 类型转换 | |||||
| (T) | 强制转换 | int a = (int)3.14; | 3 | 溢出抛 InvalidCastException | |
| as | 安全转换 | obj as string | null(失败不抛异常) | 仅适用于引用类型和可空类型 | |
| is | 类型检查 | obj is string | true/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 表达式、属性/方法表达式体,代码更紧凑
