如果你使用过 LINQ,则会有丰富库(其中 Func 类型是 API 集的一部分)的经验。 (如果尚不熟悉 LINQ,建议阅读 LINQ 教程,以及本文前面有关 lambda 表达式的文章。)表达式树提供与作为函数的参数的更丰富的交互。

在创建 LINQ 查询时,通常使用 Lambda 表达式编写函数参数。 在典型的 LINQ 查询中,这些函数参数会被转换为编译器创建的委托。

当想要进行更丰富的交互时,需要使用表达式树。 表达式树将代码表示为可以检查、修改或执行的结构。 这些工具让你能够在运行时操作代码。 可以编写检查正在运行的算法的代码,或插入新的功能。 在更加高级的方案中,你可以修改正在运行的算法,甚至可以将 C# 表达式转换为另一种形式从而可在另一环境中执行。

你可能已经编写过使用表达式树的代码。 实体框架的 LINQ API 接受表达式树,以此作为 LINQ 查询表达式模式的参数。 这使得 Entity Framework(实体框架)能够将使用 C# 编写的查询转换为在数据库引擎中执行的 SQL。 另一个示例是 Moq,它是用于 .NET 的热门模拟框架。

本教程的其余部分将探索表达式树是什么、检查支持表达式树的框架类,并介绍如何使用表达式树。 你将学习如何阅读表达式树、如何创建表达式树、如何创建修改的表达式树,以及如何执行表达式树所表示的代码。 阅读后,便可以开始使用这些结构来创建丰富的自适应算法。

C#3.0新增功能10 表达式树 01 简介的更多相关文章

  1. C#3.0新增功能10 表达式树 05 解释表达式

    连载目录    [已更新最新开发文章,点击查看详细] 表达式树中的每个节点将是派生自 Expression 的类的对象. 该设计使得访问表达式树中的所有节点成为相对直接的递归操作. 常规策略是从根节点 ...

  2. C#3.0新增功能10 表达式树 07 翻译(转换)表达式

    连载目录    [已更新最新开发文章,点击查看详细] 本篇将介绍如何访问表达式树中的每个节点,同时生成该表达式树的已修改副本. 以下是在两个重要方案中将使用的技巧. 第一种是了解表达式树表示的算法,以 ...

  3. C#3.0新增功能10 表达式树 02 说明

    连载目录    [已更新最新开发文章,点击查看详细] 表达式树是定义代码的数据结构. 它们基于编译器用于分析代码和生成已编译输出的相同结构.表达式树和 Roslyn API 中用于生成分析器和 Cod ...

  4. C#3.0新增功能10 表达式树 03 支持表达式树的框架类型

    连载目录    [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...

  5. C#3.0新增功能10 表达式树 06 生成表达式

    连载目录    [已更新最新开发文章,点击查看详细] 到目前为止,你所看到的所有表达式树都是由 C# 编译器创建的. 你所要做的是创建一个 lambda 表达式,将其分配给一个类型为 Expressi ...

  6. C#3.0新增功能10 表达式树 04 执行表达式

    连载目录    [已更新最新开发文章,点击查看详细] 表达式树 是表示一些代码的数据结构. 它不是已编译且可执行的代码. 如果想要执行由表达式树表示的 .NET 代码,则必须将其转换为可执行的 IL ...

  7. C#3.0新增功能09 LINQ 基础01 语言集成查询

    连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...

  8. C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点

    C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点   第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它 ...

  9. C#2.0新增功能06 协变和逆变

    连载目录    [已更新最新开发文章,点击查看详细] 在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反. 以下代码演示分配兼容性.协 ...

随机推荐

  1. QT5.6,5.7,5.8的新特征以及展望(Qt5.7首次正式支持Qt3D,以前都是预览版)

    https://wiki.qt.io/New_Features_in_Qt_5.6 (跨平台High-DPI,改进WebEngine到45,支持WIN 10,Canvas3D,3D) https:// ...

  2. MASM 命令行编译方法

    假设有一个t est.asm ,一个test.rc 可以在CMD里这么编译: ml /c /coff test.asm rc test.rc link /subsystem:windows test. ...

  3. windows service 之访问权限(有NetworkService和LocalSystem的区分)

    最近写了一个关于从局域网的算机上下载文件的winodws service,最初认为应该没什么大的问题.通过本地的调试也没发现问题.但是当我把程序发布后发现服务报错“访问路径被拒绝”,我的第一感觉,肯定 ...

  4. Delphi类与方法(几十篇)

    http://www.cnblogs.com/del/category/114896.html

  5. [每天记录一个Bug]Cell中由于block加载网络请求产生的复用

    Bug 出现场景:   cell中使用加载图片的网络请求出现复用,截图如下:         复用原因:   Cell Model中只有一个用户的uid,所有用户相关信息:例如头像\名称\信息等是通过 ...

  6. xmanager小技巧

    使用manager时候,左键选中之后,直接右键粘贴,能带来效率的提升.虽然是小技巧,但有人还是不知道,这里简单写一下,供需要的同学参考. 简单二步设置: 1.工具-选项

  7. C语言实现常用数据结构——堆

    #include<stdio.h> #include<stdlib.h> #define CAPACITY 20 /*堆有两个性质: * 1.结构性:堆必须是一颗完全二叉树 * ...

  8. 基于Bert的文本情感分类

    详细代码已上传到github: click me Abstract:    Sentiment classification is the process of analyzing and reaso ...

  9. IOS关于数据加密(主要为登录加密)想总结的

    首先上来就来说一下,IOS常见的几种加密算法  *哈希(散列)函数 : MD5.SHA  *对称加密算法:DES.3DES.AES  *非对称加密算法:RSA 一.哈希(散列)函数  1.MD5 MD ...

  10. Android开发之旅(1) 之 Android 开发环境搭建

    工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...