目 录CONTENT

文章目录

CSharp(十) 其他运算符

CSharp(十) 其他运算符

成员访问运算符

运算符 名称 示例 说明
. 成员访问 obj.Method() 访问对象的方法或属性
?. 空条件成员访问 obj?.Method() 访问对象的方法或属性,如果对象为null则返回null
?[] 空条件索引器访问 obj?.[index] 访问对象的索引器,如果对象为null则返回null
[] 索引器 arr[index] 访问数组的元素
() 调用/分组 Method()(a+b) 调用方法或者改变优先级
^ 索引从末尾 array[^1] 倒数第 1 个元素(C# 8+)
.. 范围 array[1..4] 索引 1 到 3 的元素(C# 8+)

类型相关运算符

运算符 名称 示例 说明
is 类型检查 obj is string 检查是否为某类型
as 类型转换 obj as string 安全转换,失败返回 null
typeof 获取类型 typeof(int) 获取 Type 对象(C# 8+)
sizeof 获取大小 sizeof(int) 获取类型字节大小(C# 8+)
nameof 获取名称 nameof(variable) 获取标识符名称(C# 6+)

模式匹配运算符

运算符 示例 说明
is x is int i 声明模式
and x is > 0 and < 10 合取模式(C# 9+)
or x is 1 or 2 析取模式(C# 9+)
not x is not null 否定模式(C# 9+)
.. var [a, .., b] = array 列表模式(C# 11+)

空相关运算符

运算符 名称 示例 说明
?? 空合并 x ?? y x 为 null 时返回 y
??= 空合并赋值 x ??= y x 为 null 时将 y 赋给 x
?. 空条件访问 obj?.Property obj 为 null 时返回 null
?[] 空条件索引 list?[0] list 为 null 时返回 null

三元/条件运算符

运算符 示例 说明
?: condition ? a : b 条件为真返回 a ,否则返回 b

其他运算符

运算符 名称 示例 说明
=> Lambda x => x* 2 定义匿名函数
= Lambda 赋值 Func f = () => 5 -
delegate 匿名方法 delegate(int x) { return x; } 已较少使用 已经较少使用
stackalloc 栈分配 stackalloc int[10] 在栈上分配内存
switch Switch 表达式 value switch { 1 => "one",_ => "other" } Switch 表达式(C# 8+)
with 记录复制 record with { Property = value } 非破坏性变更(C# 9+)

运算符优先级(由高到低)

优先级 运算符
1 () [] . ?. ?[] ++ (后缀) -- (后缀) ^ ..
2 ++ (前缀) -- (前缀) + (正) - (负) ! ~ typeof nameof sizeof stackalloc
3 * / %
4 + -
5 << >> >>>
6 < > <= >= is as
7 == !=
8 &
9 ^
10 逻辑或
11 &&
12 短路或
13 ??
14 ?: switch
15 = += -= 等所有赋值运算符
16 => => delegate stackalloc with
0
博主关闭了当前页面的评论