💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# C# 运算符 C# 提供了许多运算符,这些运算符是指定要在表达式中执行哪些操作(数学、索引、函数调用等等)的符号。在应用于用户定义类型之前,你可以对许多运算符进行[重载](https://msdn.microsoft.com/zh-CN/library/8edha89s.aspx)以更改其含义。 针对整型类型的运算(如 **==**、**!=**、**<**、**>**、**&**、**|**)通常可用于枚举 (**enum**) 类型。 以下章节按最高优先级到最低优先级的顺序列示 C# 运算符。各章节内运算符的优先级相同。 ## 主要运算符 以下是具有最高优先级的运算符。请注意,你可以单击运算符转到包含示例的详细页面。 [x.y](https://msdn.microsoft.com/zh-CN/library/6zhxzbds.aspx) - 成员访问。 [x?.y](https://msdn.microsoft.com/zh-CN/library/dn986595.aspx) - null 条件成员访问。如果左边操作数为 null,则返回 null。 [f(x)](https://msdn.microsoft.com/zh-CN/library/0z4503sa.aspx) - 函数调用。 [a[x]](https://msdn.microsoft.com/zh-CN/library/a3hd7ste.aspx) - 聚合对象索引。 [a?[x]](https://msdn.microsoft.com/zh-CN/library/dn986595.aspx) - null 条件索引。如果左边操作数为 null,则返回 null。 [x++](https://msdn.microsoft.com/zh-CN/library/36x43w8w.aspx) - 后缀递增。先返回 x 值,然后用加 1(通常加整数 1)后的 x 值更新存储位置。 [x--](https://msdn.microsoft.com/zh-CN/library/wc3z3k8c.aspx) - 后缀递减。先返回 x 值,然后用减 1(通常减整数 1)后的 x 值更新存储位置。 [New](https://msdn.microsoft.com/zh-CN/library/fa0ab757.aspx) - 类型实例化。 [Typeof](https://msdn.microsoft.com/zh-CN/library/58918ffs.aspx) - 返回表示操作数的 System.Type 对象。 [Checked](https://msdn.microsoft.com/zh-CN/library/74b4xzyw.aspx) - 对整数运算启用溢出检查。 [Unchecked](https://msdn.microsoft.com/zh-CN/library/a569z7k8.aspx) - 对整数运算禁用溢出检查。这是默认的编译器行为。 [default(T)](https://msdn.microsoft.com/zh-CN/library/xwth0h0d.aspx) - 返回类型 T 的默认初始化值,T 为引用类型时返回 null,T 为数值类型时返回零,T 为结构类型时返回填充为零/null 的成员。 [Delegate](https://msdn.microsoft.com/zh-CN/library/0yw3tz5k.aspx) - 声明并返回一个委托实例。 [Sizeof](https://msdn.microsoft.com/zh-CN/library/eahchzkf.aspx) - 返回类型操作数的大小(以字节为单位)。 [->](https://msdn.microsoft.com/zh-CN/library/s8bz4d5h.aspx) - 取消指针引用与成员访问相结合。 ## 一元运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [+x](https://msdn.microsoft.com/zh-CN/library/k1a63xkz.aspx) - 返回 x 值。 [-x](https://msdn.microsoft.com/zh-CN/library/wch5w409.aspx) - 数值求反。 [!x](https://msdn.microsoft.com/zh-CN/library/f2kd6eb2.aspx) - 逻辑求反。 [~x](https://msdn.microsoft.com/zh-CN/library/d2bd4x66.aspx) - 按位求补。 [++x](https://msdn.microsoft.com/zh-CN/library/36x43w8w.aspx) - 前缀递增。先用加 1(通常加整数 1)后的 x 值更新存储位置,然后返回 x 值。 [--x](https://msdn.microsoft.com/zh-CN/library/wc3z3k8c.aspx) - 前缀递减。先用减 1(通常减整数 1)后的 x 值更新存储位置,然后返回 x 值。 [(T)x](https://msdn.microsoft.com/zh-CN/library/0z4503sa.aspx) - 类型转换。 [Await](https://msdn.microsoft.com/zh-CN/library/hh156528.aspx) - 等待 Task。 [&x](https://msdn.microsoft.com/zh-CN/library/sbf85k1c.aspx) - 地址。 [*x](https://msdn.microsoft.com/zh-CN/library/z19tbbca.aspx) - 取消引用。 ## 乘法运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x * y](https://msdn.microsoft.com/zh-CN/library/z19tbbca.aspx) - 乘法。 [x / y](https://msdn.microsoft.com/zh-CN/library/3b1ff23f.aspx) - 除法。如果操作数均为整数,则结果为整数,舍去小数(例如,-7 / 2 is -3)。 [x % y](https://msdn.microsoft.com/zh-CN/library/0w4e0fzs.aspx) - 取模。如果操作数均为整数,则返回 x 除以 y 后的余数。如果 q = x / y 且 r = x % y,则 x = q * y + r。 ## 加法运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x + y](https://msdn.microsoft.com/zh-CN/library/k1a63xkz.aspx) - 加法。 [x – y](https://msdn.microsoft.com/zh-CN/library/wch5w409.aspx) - 减法。 ## 移位运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x << y](https://msdn.microsoft.com/zh-CN/library/a1sway8w.aspx) - 向左移位,右边移出的空位补零。 [x >> y](https://msdn.microsoft.com/zh-CN/library/xt18et0d.aspx) - 向右移位。如果左操作数是 **int** 或 **long**,则左位数补符号位。如果左操作数是 **uint** 或 **ulong**,则左位数补零。 ## 关系和类型测试运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x < y](https://msdn.microsoft.com/zh-CN/library/z5wecxwa.aspx) - 小于(如果 x 小于 y,则为 true)。 [x > y](https://msdn.microsoft.com/zh-CN/library/yxk8751b.aspx) - 大于(如果 x 大于 y,则为 true)。 [x <= y](https://msdn.microsoft.com/zh-CN/library/hx063734.aspx) - 小于等于。 [x >= y](https://msdn.microsoft.com/zh-CN/library/a59bsyk4.aspx) - 大于等于。 [Is](https://msdn.microsoft.com/zh-CN/library/scekt9xw.aspx) - 类型兼容性。如果求值后的左操作数可以转换为右操作数中指定的类型(静态类型),则返回 true。 [As](https://msdn.microsoft.com/zh-CN/library/cscsdfbt.aspx) - 类型转换。返回左操作数并转换为右操作数中指定的类型(静态类型),但 **as** 返回 **null**,其中 (T)x 会引发异常。 ## 相等运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x == y](https://msdn.microsoft.com/zh-CN/library/53k8ybth.aspx) - 相等。默认情况下,对于 **string** 以外的引用类型,此运算符返回引用相等(标识测试)。但是,类型可以重载 **==**,因此,如果你想测试标识,最好对 **object** 使用 ReferenceEquals 方法。 [x != y](https://msdn.microsoft.com/zh-CN/library/3tz250sf.aspx) - 不相等。请参阅有关 **==** 的注释。如果某个类型重载 **==**,则它必须重载 **!=**。 ## 逻辑 AND 运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x & y](https://msdn.microsoft.com/zh-CN/library/sbf85k1c.aspx) - 逻辑或位 AND。与整数类型一起使用,并且通常允许 **enum** 类型。 ## 逻辑 XOR 运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x ^ y](https://msdn.microsoft.com/zh-CN/library/zkacc7k1.aspx) - 逻辑或位 XOR。通常可以将此运算符与整数类型和 **enum** 类型一起使用。 ## 逻辑 OR 运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x | y](https://msdn.microsoft.com/zh-CN/library/kxszd0kx.aspx) - 逻辑或位 OR。与整数类型一起使用,并且通常允许 **enum** 类型。 ## 条件 AND 运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x && y](https://msdn.microsoft.com/zh-CN/library/2a723cdk.aspx) - 逻辑 AND。如果第一个操作数为 false,则 C# 不对第二个操作数求值。 ## 条件 OR 运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x || y](https://msdn.microsoft.com/zh-CN/library/6373h346.aspx) - 逻辑 OR。如果第一个操作数为 true,则 C# 不对第二个操作数求值。 ## Null 合并运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [x ?? y](https://msdn.microsoft.com/zh-CN/library/ms173224.aspx) - 如果不为 **null**,则返回 x;否则返回 y。 ## 条件运算符 此运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击该运算符转到包含示例的详细页面。 [t ? x : y](https://msdn.microsoft.com/zh-CN/library/ty67wk28.aspx) - 如果测试 t 为 true,则求值并返回 x;否则,求值并返回 y。 ## 赋值和 Lambda 运算符 这些运算符的优先级比下一章节高,比上一章节低。请注意,你可以单击运算符转到包含示例的详细页面。 [x = y](https://msdn.microsoft.com/zh-CN/library/sbkb459w.aspx) - 赋值。 [x += y](https://msdn.microsoft.com/zh-CN/library/sa7629ew.aspx) - 递增。 x 值加 y 值,结果存储在 x 中,并返回新值。如果 x 指定 **event**,则 y 必须是 C# 作为事件处理程序添加的相应函数。 [x -= y](https://msdn.microsoft.com/zh-CN/library/2y9zhhx1.aspx) - 递减。 x 值减 y 值,结果存储在 x 中,并返回新值。如果 x 指定 **event**,则 y 必须是 C# 作为事件处理程序删除的相应函数 [x *= y](https://msdn.microsoft.com/zh-CN/library/s2bkaksf.aspx) - 乘法赋值。 x 值乘以 y 值,结果存储在 x 中,并返回新值。 [x /= y](https://msdn.microsoft.com/zh-CN/library/d31sybc9.aspx) - 除法赋值。 x 值除以 y 值,结果存储在 x 中,并返回新值。 [x %= y](https://msdn.microsoft.com/zh-CN/library/ydwa9zh0.aspx) - 取模赋值。 x 值除以 y 值,余数存储在 x 中,并返回新值。 [x &= y](https://msdn.microsoft.com/zh-CN/library/e669ax02.aspx) - AND 赋值。 y 值和 x 值相与,结果存储在 x 中,并返回新值。 [x |= y](https://msdn.microsoft.com/zh-CN/library/h5f1zzaw.aspx) - OR 赋值。 y 值和 x 值相或,结果存储在 x 中,并返回新值。 [x ^= y](https://msdn.microsoft.com/zh-CN/library/0zbsw2z6.aspx) - XOR 赋值。 y 值和 x 值相异或,结果存储在 x 中,并返回新值。 [x <<= y](https://msdn.microsoft.com/zh-CN/library/ayt2kcfb.aspx) - 左移赋值。将 x 值向左移动 y 位,结果存储在 x 中,并返回新值。 [x >>= y](https://msdn.microsoft.com/zh-CN/library/23as4533.aspx) - 右移赋值。将 x 值向右移动 y 位,结果存储在 x 中,并返回新值。 [=>](https://msdn.microsoft.com/zh-CN/library/bb311046.aspx) - lambda 声明。 ## 算术溢出 算术运算符([+](https://msdn.microsoft.com/zh-CN/library/k1a63xkz.aspx)、[-](https://msdn.microsoft.com/zh-CN/library/wch5w409.aspx)、[*](https://msdn.microsoft.com/zh-CN/library/z19tbbca.aspx)、[/](https://msdn.microsoft.com/zh-CN/library/3b1ff23f.aspx))产生的结果可能会超出所涉数值类型的可能值的范围。详细信息应参考特定运算符的相关章节,而一般情况下: * 整数算术溢出或者引发 [OverflowException](https://msdn.microsoft.com/zh-CN/library/system.overflowexception.aspx),或者放弃结果的最高有效位。整数被零除总是引发 **DivideByZeroException**。 * 浮点算术溢出或被零除从不引发异常,因为浮点类型基于 IEEE 754,因此可以表示无穷大和 NaN(非数值)。 * [小数](https://msdn.microsoft.com/zh-CN/library/364x0z75.aspx)算术溢出总是引发 [OverflowException](https://msdn.microsoft.com/zh-CN/library/system.overflowexception.aspx)。小数被零除总是引发 [DivideByZeroException](https://msdn.microsoft.com/zh-CN/library/system.dividebyzeroexception.aspx)。 当发生整数溢出时,产生的结果取决于执行上下文,该上下文可为 [checked 或 unchecked](https://msdn.microsoft.com/zh-CN/library/khy08726.aspx)。在 checked 上下文中引发 [OverflowException](https://msdn.microsoft.com/zh-CN/library/system.overflowexception.aspx)。在 unchecked 上下文中,放弃结果的最高有效位并继续执行。因此,C# 让你有机会选择处理或忽略溢出。 除算术运算符以外,整型类型之间的转换也会导致溢出(例如,将 [long](https://msdn.microsoft.com/zh-CN/library/ctetwysk.aspx) 转换为 [int](https://msdn.microsoft.com/zh-CN/library/5kzh1b5w.aspx))并受 checked 或 unchecked 执行的限制。但是,位运算符和移位运算符永远不会导致溢出。 ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-CN/library/618ayhy6.aspx) [C# 编程指南](https://msdn.microsoft.com/zh-CN/library/67ef8sbd.aspx) [Visual C#](https://msdn.microsoft.com/zh-CN/library/kx37x362.aspx) [可重载运算符(C# 编程指南)](https://msdn.microsoft.com/zh-CN/library/8edha89s.aspx) [C# 关键字](https://msdn.microsoft.com/zh-CN/library/x53a06bb.aspx)