C# 提供了許多運算符,這些運算符是指定要在表達式中執行哪些操作(數學、索引、函數調用等等)的符號。在應用於用戶定義類型之前,你可以對許多運算符進行重載以更改其含義。
針對整型類型的運算(如 ==、!=、<、>、&、|)通常可用於枚舉 (enum) 類型。
以下章節按最高優先級到最低優先級的順序列示 C# 運算符。各章節內運算符的優先級相同。
主要運算符以下是具有最高優先級的運算符。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x.y - 成員訪問。
x?.y - null 條件成員訪問。如果左邊操作數為 null,則返回 null。
f(x) - 函數調用。
a[x] - 聚合對象索引。
a?[x] - null 條件索引。如果左邊操作數為 null,則返回 null。
x++ - 後綴遞增。先返回 x 值,然後用加 1(通常加整數 1)後的 x 值更新存儲位置。
x-- - 後綴遞減。先返回 x 值,然後用減 1(通常減整數 1)後的 x 值更新存儲位置。
New - 類型實例化。
Typeof - 返回表示操作數的 System.Type 對象。
Checked - 對整數運算啟用溢出檢查。
Unchecked - 對整數運算禁用溢出檢查。這是默認的編譯器行為。
default(T) - 返回類型 T 的默認初始化值,T 為引用類型時返回 null,T 為數值類型時返回零,T 為結構類型時返回填充為零/null 的成員。
Delegate - 聲明並返回一個委托實例。
Sizeof - 返回類型操作數的大小(以字節為單位)。
-> - 取消指針引用與成員訪問相結合。
一元運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
+x - 返回 x 值。
-x - 數值求反。
!x - 邏輯求反。
~x - 按位求補。
++x - 前綴遞增。先用加 1(通常加整數 1)後的 x 值更新存儲位置,然後返回 x 值。
--x - 前綴遞減。先用減 1(通常減整數 1)後的 x 值更新存儲位置,然後返回 x 值。
(T)x - 類型轉換。
Await - 等待 Task。
&x - 地址。
*x - 取消引用。
乘法運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x * y - 乘法。
x / y - 除法。如果操作數均為整數,則結果為整數,捨去小數(例如,-7 / 2 is -3)。
x % y - 取模。如果操作數均為整數,則返回 x 除以 y 後的余數。如果 q = x / y 且 r = x % y,則 x = q * y + r。
加法運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x + y - 加法。
x – y - 減法。
移位運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x << y - 向左移位,右邊移出的空位補零。
x >> y - 向右移位。如果左操作數是 int 或 long,則左位數補符號位。如果左操作數是 uint 或 ulong,則左位數補零。
關系和類型測試運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x < y - 小於(如果 x 小於 y,則為 true)。
x > y - 大於(如果 x 大於 y,則為 true)。
x <= y - 小於等於。
x >= y - 大於等於。
Is - 類型兼容性。如果求值後的左操作數可以轉換為右操作數中指定的類型(靜態類型),則返回 true。
As - 類型轉換。返回左操作數並轉換為右操作數中指定的類型(靜態類型),但 as 返回 null,其中 (T)x 會引發異常。
相等運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x == y - 相等。默認情況下,對於 string 以外的引用類型,此運算符返回引用相等(標識測試)。但是,類型可以重載 ==,因此,如果你想測試標識,最好對 object 使用 ReferenceEquals 方法。
x != y - 不相等。請參閱有關 == 的注釋。如果某個類型重載 ==,則它必須重載 !=。
邏輯 AND 運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x & y - 邏輯或位 AND。與整數類型一起使用,並且通常允許 enum 類型。
邏輯 XOR 運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x ^ y - 邏輯或位 XOR。通常可以將此運算符與整數類型和 enum 類型一起使用。
邏輯 OR 運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x | y - 邏輯或位 OR。與整數類型一起使用,並且通常允許 enum 類型。
條件 AND 運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x && y - 邏輯 AND。如果第一個操作數為 false,則 C# 不對第二個操作數求值。
條件 OR 運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x || y - 邏輯 OR。如果第一個操作數為 true,則 C# 不對第二個操作數求值。
Null 合並運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
x ?? y - 如果不為 null,則返回 x;否則返回 y。
條件運算符此運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊該運算符轉到包含示例的詳細頁面。
t ? x : y - 如果測試 t 為 true,則求值並返回 x;否則,求值並返回 y。
賦值和 Lambda 運算符這些運算符的優先級比下一章節高,比上一章節低。請注意,你可以單擊運算符轉到包含示例的詳細頁面。
x = y - 賦值。
x += y - 遞增。 x 值加 y 值,結果存儲在 x 中,並返回新值。如果 x 指定 event,則 y 必須是 C# 作為事件處理程序添加的相應函數。
x -= y - 遞減。 x 值減 y 值,結果存儲在 x 中,並返回新值。如果 x 指定 event,則 y 必須是 C# 作為事件處理程序刪除的相應函數
x *= y - 乘法賦值。 x 值乘以 y 值,結果存儲在 x 中,並返回新值。
x /= y - 除法賦值。 x 值除以 y 值,結果存儲在 x 中,並返回新值。
x %= y - 取模賦值。 x 值除以 y 值,余數存儲在 x 中,並返回新值。
x &= y - AND 賦值。 y 值和 x 值相與,結果存儲在 x 中,並返回新值。
x |= y - OR 賦值。 y 值和 x 值相或,結果存儲在 x 中,並返回新值。
x ^= y - XOR 賦值。 y 值和 x 值相異或,結果存儲在 x 中,並返回新值。
x <<= y - 左移賦值。將 x 值向左移動 y 位,結果存儲在 x 中,並返回新值。
x >>= y - 右移賦值。將 x 值向右移動 y 位,結果存儲在 x 中,並返回新值。
=> - lambda 聲明。
算術溢出算術運算符(+、-、*、/)產生的結果可能會超出所涉數值類型的可能值的范圍。詳細信息應參考特定運算符的相關章節,而一般情況下:
整數算術溢出或者引發 OverflowException,或者放棄結果的最高有效位。整數被零除總是引發 DivideByZeroException。
浮點算術溢出或被零除從不引發異常,因為浮點類型基於 IEEE 754,因此可以表示無窮大和 NaN(非數值)。
小數算術溢出總是引發 OverflowException。小數被零除總是引發 DivideByZeroException。
當發生整數溢出時,產生的結果取決於執行上下文,該上下文可為 checked 或 unchecked。在 checked 上下文中引發 OverflowException。在 unchecked 上下文中,放棄結果的最高有效位並繼續執行。因此,C# 讓你有機會選擇處理或忽略溢出。
除算術運算符以外,整型類型之間的轉換也會導致溢出(例如,將 long 轉換為 int)並受 checked 或 unchecked 執行的限制。但是,位運算符和移位運算符永遠不會導致溢出