跳至內容

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開始,運算符可以是任意序。