C Sharp/Operators

算术编辑

算术运算符的运算数都是数值型的,即下述ab是表达式。

表达式 读法 元数 解释
a + b a plus b binary 加法
a - b a minus b binary 减法
a*b a times b binary 乘法
a/b a divided by b binary 除法。如果2个操作数都是整数,商也是整数。
a%b a mod b binary 要求操作数都是整数,返回余数。
a++ a plus plus or Postincrement a unary 操作数必须是左值,返回加一之前的值。
++a plus plus a or Preincrement a unary 操作数必须是左值,返回加一之后的值。
a-- a minus minus or Postdecrement a unary 操作数必须是左值,返回减一之前的值。
--a minus minus a or Predecrement a unary 操作数必须是左值,返回减一之后的值。

逻辑编辑

逻辑运算符的运算数是布尔值或整数值。

表达式 读法 元数 解释
a&b a bitwise and b binary 对两个操作数均求值,如果是整型则按位与,如果是布尔型则逻辑与。
a&&b a and b binary 只用于布尔值表达式。短路求值做逻辑与。
a | b a bitwise or b binary 对两个操作数均求值,如果是整型则按位或,如果是布尔型则逻辑或。
a || b a or b binary 只用于布尔值表达式。短路求值做逻辑或。
a ^ b a x-or b binary 如果是整型则按位异或,如果是布尔型则逻辑异或。
!a not a unary 只用于布尔值表达式。逻辑非
~a bitwise not a unary 只用于整型值表达式。按位非

按位移位编辑

表达式 读法 元数 解释
a << b a left shift b binary 左移位
a >> b a right shift b binary 右移位

关系编辑

表达式 读法 元数 解释
a == b a is equal to b binary 对于值类型或字符串类型,比较值是否相等。对于引用类型,比较是否为同一对象。
a != b a is not equal to b binary 返回运算符==的逻辑非。
a < b a is less than b binary 只用于数值表达式。小于。
a > b a is greater than b binary 只用于数值表达式。大于。
a <= b a is less than or equal to b binary 只用于数值表达式。小于等于。
a >= b a is greater than or equal to b binary 只用于数值表达式。大于等于。

赋值编辑

表达式 读法 元数 解释
a = b a equals (or set to) b binary 对于值类型,修改左值的基本值;对于引用类型,左值指向新的引用对象。
a = b = c b set to c, and then a set to b n-ary 连续赋值。等价于a = (b = c)

短路赋值编辑

表达式 读法 元数 解释
a += b a plus equals (or increment by) b binary 等价于a = a + b.
a -= b a minus equals (or decrement by) b binary 等价于a = a - b.
a *= b a multiply equals (or multiplied by) b binary 等价于a = a*b.
a /= b a divide equals (or divided by) b binary 等价于a = a/b.
a %= b a mod equals b binary 等价于a = a%b.
a &= b a and equals b binary 等价于a = a&b.
a |= b a or equals b binary 等价于a = a|b.
a ^= b a xor equals b binary 等价于a = a^b.
a <<= b a left-shift equals b binary 等价于a = a << b.
a >>= b a right-shift equals b binary E等价于a = a >> b.

类型信息编辑

表达式 读法 元数 解释
x is T is x of type T binary is运算符会忽略在要检查的实例的类上定义的任何运算符重载。当使用==运算符时,该运算符可能会被重载。
x as T cast x to T binary 等价于x is T ? (T)x : null
sizeof(x) size of x unary 只能用于值类型
typeof(T) type of T unary 返回System.Type对象。操作数必须是类型。对象应该用GetType方法

指针操纵编辑

表达式 读法 元数 解释
*a object at a unary 间址运算符
a->member member member of a binary 类似于.运算符。
a[b] object at offset b from a binary 索引一个指针
&a reference to a unary 取地址
stackalloc a allocate a on the stack binary 栈内存分配
fixed a prevent a from being relocated binary

溢出异常控制编辑

表达式 读法 元数 解释
checked(a) evaluate a and check for overflow unary 对值a溢出检查
unchecked(a) evaluate a without checking for overflow unary 对值a避免溢出检查

其他编辑

表达式 读法 元数 解释
a.b member b of a binary 访问类型或命名空间a的成员b。如b是字段,则调用该字段的get函数
a[b] item b in a binary 返回a的索引b的项目的值。数组是基于0索引
a[^b] item b from the end in a binary 返回a从尾部计数的索引b的项目的值。C# 8.0的特性。^e是System.Index类型。
a[b..c] binary 返回a的索引在[b,c)的项目值列表。C# 8.0的特性。表达式a..b是System.Range类型
(a)b cast b to type a binary b的值显式转换为类型ab的类型必须有类型转换函数直接到a或者到另一个类型并有转换函数到a.
new a create a new a n-ary 创建一个a类型的对象并调用缺省构造函数。a类型的构造函数也可以带实参:new a(type1 arg1, type2 arg2, ...)
a + b concatenate string b to the end of string a binary 如果ab是字符串,则连接它们。如果任何一个操作数是null, 则被空字符串("")替代。如果一个操作数是字符串另一个是非字符串的object, 则连接前调用ToString()
a + b concatenate delegate b to delegate a binary 如果ab是委托,执行委托的连接。
a ? b : c if a then b else c ternary 如果a是真,则对b求值并返回其值,否则对c求值并返回其值。任何情况bc只有一个求值.
a ?? b if a is null then b else a binary 如果anull, 对b求值并返回其值,否则对a求值并返回其值。如果anull, b不会被求值.
a?.b if a is not null then evaluate b binary 在试图引用对象的成员之前,先判断对象是否为null。可连续使用null判断,如:a?.b()??ca?.b()?[c]
a?[b] if a is not null then get b binary 在试图引用数组的元素之前,先判断对象是否为null。可连续使用null判断,如:a?[b]??c)或a?.b()?[c]
@"a" verbatim "a" nullary 字符串忽略转义字符序列。
$"{b}" insert b into the string literal n-ary $开始一个字符串插值语句。包含在{}的符号名字将被求出其字符串值,必要时调用ToString()
$@"{b}" insert b into the verbatim string literal n-ary 组合@$. 使用单层花括号{ and }。从C# 8开始,运算符可以是任意序。