C# 表达式
最后修改于 2025 年 4 月 22 日
本文探讨了在 C# 编程中使用表达式。
一个 表达式 是一个计算结果为单个值的代码单元。
表达式由操作数和运算符组成,其中运算符指定要对操作数执行的操作。
C# 支持多种类型的表达式,包括
- lambda 表达式
- 查询表达式
- switch 表达式
- with 表达式
- 内插字符串表达式
- 表达式体定义
Funcsquare = (int x) => x * x;
此赋值的右侧包含一个函数体表达式,该表达式会生成一个计算值。
Console.WriteLine("falcon");
相反,像控制台输出这样的语句不会产生值。
C# lambda 表达式
lambda 表达式是一个没有固定标识符的匿名函数,它使用 => 运算符将参数与主体分开。
Program.cs
int[] vals = { 1, -2, 3, 4, 0, -3, 2, 1, 3 };
var res = Array.FindAll(vals, (e) => e > 0);
Console.WriteLine(string.Join(" ", res));
此示例使用 lambda 表达式 (e) => e > 0 作为 Array.FindAll 的谓词,从数组中筛选出正整数。
$ dotnet run 1 3 4 2 1 3
C# 查询表达式
查询表达式支持通过结构化查询在 C# 中提取和转换数据。
Program.cs
int[] vals = { -2, 4, 6, -1, 2, 0, 1, -3, -4, 2, 3, 8 };
var evens =
from val in vals
where val % 2 == 0
select val;
Console.WriteLine(string.Join(" ", evens));
此示例使用查询表达式来识别整数数组中的所有偶数。
$ dotnet run -2 4 6 2 0 -4 2 8
C# switch 表达式
与传统的 switch 语句不同,switch 表达式通过将表达式与模式进行比较来简化分支,并返回匹配分支的值。
Program.cs
int age = 23; string name = "Peter"; Listcolors = new List {"blue", "khaki", "orange"}; var nums = new int[] {1, 2, 3, 4, 5}; Console.WriteLine(check(age)); Console.WriteLine(check(name)); Console.WriteLine(check(colors)); Console.WriteLine(check(nums)); object check(object val) => val switch { int => "integer", string => "string", List => "list of strings", Array => "array", _ => "unknown" };
此示例使用 switch 表达式来确定各种变量的数据类型。
$ dotnet run integer string list of strings array
C# with 表达式
with 表达式创建一个操作数的修改副本,更改指定的属性或字段。
Program.cs
Point p1 = new Point(0, 0);
Point p2 = p1 with { y = 3 };
Console.WriteLine(p1);
Console.WriteLine(p2);
record Point(int x, int y);
此示例生成一个点的副本,使用 with 表达式将其 y 坐标修改为 3。
$ dotnet run
Point { x = 0, y = 0 }
Point { x = 0, y = 3 }
C# 内插字符串表达式
内插字符串表达式以 $ 为前缀,允许将表达式嵌入到字符串中以进行动态格式化。
Program.cs
int x = 5;
int y = 6;
Console.WriteLine($"{x} * {y} = {x * y}");
此示例通过将乘法表达式嵌入到内插字符串中来构造格式化的字符串。
$ dotnet run 5 * 6 = 30
C# 表达式体定义
表达式体定义为定义函数、构造函数、属性、索引器或终结器提供了一种简洁的语法。
Program.cs
Funcsquare = (int x) => x * x; int r = square(5); Console.WriteLine(r); var u = new User("John Doe", "gardener"); Console.WriteLine(u); class User { public User(string name, string occupation) => (Name, Occupation) = (name, occupation); public string Name { get; set; } public string Occupation { get; set; } public override string ToString() => $"{Name} is a {Occupation}"; }
此程序演示了 square 函数、User 构造函数和 ToString 方法的表达式体定义。
$ dotnet run 25 John Doe is a gardener
来源
本文演示了如何在 C# 中使用各种表达式。
作者
列出所有 C# 教程。