什么是表达式树,如何使用它们,为什么要使用它们?

Posted

技术标签:

【中文标题】什么是表达式树,如何使用它们,为什么要使用它们?【英文标题】:What are Expression Trees, how do you use them, and why would you use them? 【发布时间】:2012-04-17 20:32:23 【问题描述】:

我刚刚遇到了我多次听说过的表达式树的概念。我只想了解表达式树的含义及其用途。

如果有人也可以指导我进行简单的解释和使用示例,我会很高兴。

【问题讨论】:

Why would you use Expression<Func<T>> rather than Func<T>?的可能重复 用几个例子来回答..***.com/questions/403088/… 【参考方案1】:

表达式树是一种包含表达式的数据结构,基本上就是代码。所以它是一个树形结构,代表您可以在代码中进行的计算。然后可以通过在一组数据上“运行”表达式树来执行这些代码。

表达式树的一大优点是您可以在代码中构建它们;也就是说,您在代码中构建可执行代码(或一系列步骤)。您还可以在执行代码之前修改代码,将表达式替换为其他表达式。

一个表达式就是一个函数委托,例如(int x =&gt; return x * x)

另见http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx

【讨论】:

这不是真的。正如链接文章中所指出的,表达式树主要用于表示将通过网络发送以在其他地方执行的计算。因此,它们不包含代码;而不是代码。 表达式树可用于您想要在本地或远程执行的任何计算。您可以轻松编写一个解析器,将类型表达式转换为表达式树。我也从未说过表达式树包含代码。 如果“包含代码片段的树结构”并不意味着它们“包含代码”,那么您应该编辑您的答案以使其清楚。您应该明确表示,表达式不包含任何 IL 代码,而是依赖于被进一步翻译成可执行的东西。 @RoyDictus 没有字里行间的阅读并不明显。假设智力通常是一个坏主意。请明确。 我还要注意,正在寻找这个问题的答案的人很可能不知道答案,并且用户的“智力”或知识应该被假设为 0(在手头的主题)

以上是关于什么是表达式树,如何使用它们,为什么要使用它们?的主要内容,如果未能解决你的问题,请参考以下文章

什么是设备以及如何使用 lambda 表达式? [复制]

一文读懂胜者树与败者树

什么是断言?你为什么要使用它们?

泛型有啥好处,为啥要使用它们?

理解B树和B+树!为何它们常用在数据库中?

何时使用公用表表达式 (CTE)