在本文中,我们使用C#中的表达式。
表达式是一个计算值的代码单元。
表达式由操作数和运算符构成。表达式的运算符指示将哪些操作应用于操作数。
C#中有几种类型的表达式:
- lambda表达式
- 查询表达式
- switch表达式
- 带表达式
- 内插字符串表达式
- 表达式体定义
Func<int, int> square = (int x) => x * x;
在赋值的右边,我们有一个函数体表达式。表达式产生一个值。
Console.WriteLine("falcon");
相比之下,语句(例如写入控制台)不会产生值。
C#lambda表达式
lambda表达式是一个未绑定到标识符的匿名函数。lambda声明运算符=>
将lambda的参数列表与其主体分开。
int[] vals = { 1, -2, 3, 4, 0, -3, 2, 1, 3 }; var res = Array.FindAll(vals, (e) => e > 0); Console.WriteLine(string.Join(" ", res));
在示例中,我们从整数数组中过滤掉所有正值。Array.FindAll
函数将谓词函数作为第二个参数。使用(e)=>e>0
lambda表达式,我们定义了这个谓词。
$ dotnet run 1 3 4 2 1 3
C#查询表达式
查询表达式允许我们在C#中使用查询提取和转换数据。
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表达式提供基于表达式与一组模式的比较的分支控制。与经典的switchkeyword不同,它返回匹配arm的值。
int age = 23; string name = "Peter"; List<string> colors = new List<string> {"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<string> => "list of strings", Array => "array", _ => "unknown" };
在示例中,我们使用switch表达式找出变量的数据类型。
$ dotnet run integer string list of strings array
C#表达式
with表达式生成其操作数的副本,并修改了指定的属性和字段。
Point p1 = new Point(0, 0); Point p2 = p1 with { y = 3 }; Console.WriteLine(p1); Console.WriteLine(p2); record Point(int x, int y);
在示例中,我们创建了一个点的副本,并将其y
成员修改为3。
$ dotnet run Point { x = 0, y = 0 } Point { x = 0, y = 3 }
C#内插字符串表达式
我们可以将表达式放入内插字符串中以创建格式化字符串。内插字符串以$
字符为前缀。
int x = 5; int y = 6; Console.WriteLine($"{x} * {y} = {x * y}");
在示例中,我们创建了一个字符串,其中我们将两个值相乘。
$ dotnet run 5 * 6 = 30
C#表达式主体定义
表达式主体定义为函数、构造函数、属性、索引器或终结器提供简明的定义。
Func<int, int> square = (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#教程。