若是你使用过 LINQ,则会有丰富库(其中 Func
类型是 API 集的一部分)的经验。 (若是尚不熟悉 LINQ,建议阅读 LINQ 教程,以及本文前面有关 lambda 表达式的文章。)表达式树提供与做为函数的参数的更丰富的交互。html
在建立 LINQ 查询时,一般使用 Lambda 表达式编写函数参数。 在典型的 LINQ 查询中,这些函数参数会被转换为编译器建立的委托。git
当想要进行更丰富的交互时,须要使用表达式树。 表达式树将代码表示为能够检查、修改或执行的结构。 这些工具让你可以在运行时操做代码。 能够编写检查正在运行的算法的代码,或插入新的功能。 在更加高级的方案中,你能够修改正在运行的算法,甚至能够将 C# 表达式转换为另外一种形式从而可在另外一环境中执行。github
你可能已经编写过使用表达式树的代码。 实体框架的 LINQ API 接受表达式树,以此做为 LINQ 查询表达式模式的参数。 这使得 Entity Framework(实体框架)可以将使用 C# 编写的查询转换为在数据库引擎中执行的 SQL。 另外一个示例是 Moq,它是用于 .NET 的热门模拟框架。算法
本教程的其他部分将探索表达式树是什么、检查支持表达式树的框架类,并介绍如何使用表达式树。 你将学习如何阅读表达式树、如何建立表达式树、如何建立修改的表达式树,以及如何执行表达式树所表示的代码。 阅读后,即可以开始使用这些结构来建立丰富的自适应算法。数据库