C Sharp/Operators
算术
算术运算符的运算数都是数值型的,即下述a
和b
是表达式。
表达式 | 读法 | 元数 | 解释 |
---|---|---|---|
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 的值显式转换为类型a 。b 的类型必须有类型转换函数直接到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 | 如果a 和b 是字符串,则连接它们。如果任何一个操作数是null , 则被空字符串("" )替代。如果一个操作数是字符串另一个是非字符串的object, 则连接前调用ToString() |
a + b | concatenate delegate b to delegate a | binary | 如果a 和b 是委托,执行委托的连接。 |
a ? b : c | if a then b else c | ternary | 如果a 是真,则对b 求值并返回其值,否则对c 求值并返回其值。任何情况b 和c 只有一个求值. |
a ?? b | if a is null then b else a | binary | 如果a 是null , 对b 求值并返回其值,否则对a 求值并返回其值。如果a 非null , b 不会被求值. |
a?.b | if a is not null then evaluate b | binary | 在试图引用对象的成员之前,先判断对象是否为null 。可连续使用null判断,如:a?.b()??c 或a?.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开始,运算符可以是任意序。 |