第二章 Expressions && Statements

Expressions: 表达式

Statements: 语句

表达式和语句的区别

表达式: 有返回值

语句: 执行操作

// Expression
20
pagesPerChapter
pagesPerChapter * 10
Math.Max(a, b)
//Statement
var pagesPerChapter = 20;
var totalBookPages = pagesPerChapter * 10;
Console.WriteLine("Hello");
if (x > 0) { ... }
for (int i = 0; i < 10; i++) { ... }
//每个表达式都可以成为语句(加上分号)
x + 2; // 语句形式,但它什么都不做

将语句转换为表达式的技巧

  • 用 LINQ 替代集合操作语句
  • 用三元运算符(?:)代替 if-else
  • 用递归代替循环(for、while、foreach)

Yagur Alex - Functional Programming with C - 2024.pdf - p32 - Techniques to convert statements to expressions

Linq

功能 方法名 示例
过滤 Where books.Where(b => b.Pages > 200)
排序 OrderBy / ThenBy books.OrderBy(b => b.Title)
映射 Select books.Select(b => b.Title.Length)
聚合 Aggregate nums.Aggregate((a, b) => a + b)
平铺 SelectMany authors.SelectMany(a => a.Books)
平均 Average books.Average(b => b.Title.Length)

表达式树

表达式树提供了在运行时进行操作的能力

LINQ的底层就是表达式树

表达式树是一种数据结构,它以树状格式表示某些代码,其中每个节点都是一个表达式。表达式树是通过lambda 表达式构建的,并允许你将 lambda 表达式中的代码视为数据进行检查

image

image

Tasks and Solves