表达式树有什么好处?

5
在使用 .Net 语言开发应用程序时,我不明白表达式树的用途或好处。它是否真的必要?
5个回答

5
一个表达式树允许您在普通的C#代码中“表达”您的代码,但是可以对其进行分解、检查和解释。例如,您可以通过编写等效的TSQL字符串(例如:LINQ-to-SQL或Entity Framework)或Web服务查询(Astoria)来解释它。您可以将其解释为RPC调用(我编写了基于表达式的RPC层)。
重申我的“解释表达式”博客文章
如果你有表达式,你可以通过调用Compile()方法来形成委托(按照说明执行),或者你可以拆开它并根据他们采取的步骤进行类似的操作。委托版本(Func<int,int,bool>)是“好斗的经理”:“我需要你给我一种从2个整数到布尔值的方法;我不在乎如何 - 当我准备好时,我会问你 - 然后你可以告诉我答案”。表达式版本(Expr<Func<int,int,bool>>)是“尽职的分析员”:“我需要你向我解释 - 如果我给了你两个整数,你会如何给我一个布尔值?”。

Expression的另一个观点是它可以作为ILGenerator的简化版本,但仍然非常灵活。非常适用于元编程。这里有一篇探讨该方法的文章


2
表达式树允许您在运行时动态构建代码,而不是在IDE中静态键入并使用编译器。它们在 文档 中有很好的解释。请注意保留HTML标记。

1

表达式树在LINQ to SQL、Entity Framework、ASP.NET MVC的HTML扩展中被广泛使用,因为运行时需要以不同的方式解释表达式(LINQ to SQL和EF:创建SQL,MVC:确定所选属性或字段)。

如果您不需要重新解释C#/VB表达式的能力,您就不需要使用表达式树。

在.NET中有很多东西,您大部分时间都用不到:例如,ServiceBase只适用于编写服务,而WPF对于Web应用程序来说并不相关。


1

如果你没有从表达式树中获得好处,那么我认为:
- 要么你没有任何需要使用表达式树的代码
- 要么你没有看到可以通过使用表达式树来改进代码的地方。

第一点没问题,我开发的大多数应用程序都没有使用表达式树的地方。为了解决第二个问题,你只需要知道什么是表达式树,它们如何工作以及它们能做什么/不能做什么。

通常在需要遍历某些代码模型时使用表达式树,例如为了基于此生成其他代码。正如已经提到的,这种方法在 Linq-to-SQL 中使用。另一个非常规的例子可能是一个应用程序,在该应用程序中,你需要将对象的属性作为一级公民对象在应用程序中传递,即你需要能够将属性作为某个类的实例进行传递。使用反射也可以完成相同的操作,但表达式树允许使这样的代码更少地依赖字符串类型。


0

表达式树的理念是将您的代码放入一个明确定义的数据结构(即树),以便其他框架可以分析、解析并代表其运行。

例如:您不会在C#中编写select from where SQL查询,但您可以使用表达式树包装您的C#代码,稍后转换器将把它转换为相应的SQL代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接