C# 运算符和表达式
概述
C# 提供了许多运算符。 其中许多都受到内置类型的支持,可用于对这些类型的值执行基本操作。
C#中有算术运算符、比较运算符、布尔逻辑运算符、位运算符和移位运算符、相等运算符
在下面的代码中,表达式的示例位于赋值的右侧:
int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);
string s = "字符串字面";
char l = s[s.Length - 1];
var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);
通常情况下,表达式会生成结果,并可包含在其他表达式中。 void 方法调用是不生成结果的表达式的示例。 它只能用作语句,如下面的示例所示:
Console.WriteLine("示例输出!");
其他类型的表达式
内插字符串表达式
var r = 2.3;
var message = $"半径 {r} 的圆的面积为 {Math.PI * r * r:F3}。";
Console.WriteLine(message);
// 输出:
// 半径2.3的圆的面积为16.619。
Lambda表达式
int[] numbers = { 2, 3, 4, 5 };
var maximumSquare = numbers.Max(x => x * x);
Console.WriteLine(maximumSquare);
// 输出:
// 25
查询表达式
var scores = new[] { 90, 97, 78, 68, 85 };
IEnumerable<int> highScoresQuery =
from score in scores
where score > 80
orderby score descending
select score;
Console.WriteLine(string.Join(" ", highScoresQuery));
// 输出:
// 97 90 85
可使用表达式主体定义为方法、构造函数、属性、索引器或终结器提供简洁的定义。
运算符优先级
下表按最高优先级到最低优先级的顺序列出 C# 运算符。 每行中运算符的优先级相同。
运算符 | 类别或名称 |
---|---|
x.y、f(x)、a[i]、x?.y、x?[y]、x++、x–、x!、new、typeof、checked、unchecked、default、nameof、delegate、sizeof、stackalloc、x->y | 基本 |
+x、-x、!x、~x、++x、–x、^x、(T)x、await、&x、*x、true 和 false | 一元 |
x…y | 范围 |
switch | switch 表达式 |
with | with 表达式 |
x * y、x / y、x % y | 乘法 |
x + y、x – y | 加法 |
x << y, x >> y | 移位 |
x < y, x > y、x <= y, x >= y、is、as | 关系和类型测试 |
x == y、x != y | 相等 |
x & y | 布尔逻辑 AND 或按位逻辑 AND |
x ^ y | 布尔逻辑 XOR 或按位逻辑 XOR |
x | y | 布尔逻辑 OR 或按位逻辑 OR |
x && y | 条件“与” |
x || y | 条件“或” |
c ? t : f | 条件运算符 |
x = y、x += y、x -= y、x *= y、x /= y、x %= y、x &= y、x |= y、x ^= y、x <<= y、x >>= y、x ??= y、=> | 赋值和 lambda 声明 |
运算符结合性
当运算符的优先级相同,运算符的结合性决定了运算的执行顺序
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // 输出: a = 1, b = 6
操作数计算
与运算符的优先级和结合性无关,从左到右计算表达式中的操作数。
以下示例展示了运算符和操作数的计算顺序:
表达式 | 计算顺序 |
---|---|
a + b | a, b, + |
a + b * c | a, b, c, *, + |
a / b + c * d | a, b, /, c, d, *, + |
关注我
感谢阅读,记得点赞关注哦