表达树有什么好处?

时间:2011-04-29 10:20:16

标签: .net expression-trees

在使用.Net语言开发应用程序时,我没有得到表达式树的使用或好处?真的有必要吗?

4 个答案:

答案 0 :(得分:4)

表达式树允许您在常规C#中表达代码,但要对其进行解构,检查并解释它。例如,您可以通过编写等效的TSQL字符串(例如:LINQ-to-SQL或Entity Framework)或Web服务查询(astoria)来解释它。您可以将其解释为RPC调用(我已经编写了基于表达式的RPC层)。

重复my "Explaining Expression" blog entry

  
      
  • 代表   版本(Func<int,int,bool>)是    beligerant manager ; “我需要你   给我一个从2个整数得到的方法   一个博尔;我不在乎 - 我什么时候   准备好了,我会问你 - 你可以告诉我   我答案是“。
  •   
  • 表达式版本   (Expr<Func<int,int,bool>>)是   尽职的分析师; “我需要你   向我解释 - 如果我给了你2   整数,你会怎么做?   给我一个布尔?“
  •   

如果你有表达式,你可以 调用Compile()来形成一个委托(完全按照解释的那样去做),你可以取消它并根据他们采取的步骤做类似的事情。


Expression的另一个观点是它可以作为ILGenerator的简化版本 - 但仍然非常通用。对元编程非常有用。这是an article exploring that approach

答案 1 :(得分:1)

表达式树允许您在运行时动态构建代码,而不是在IDE中使用编译器静态键入代码。它们在documentation中得到了很好的解释。

答案 2 :(得分:1)

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

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

(.NET中有很多东西你大部分时间都不会使用:例如,ServiceBase仅适用于编写服务,WPF与Web应用程序无关。)

答案 3 :(得分:0)

如果你没有得到表达树的好处那么我想:
  - 要么你没有任何需要表达树的代码
  - 或者您没有看到使用表达式树可以改进代码的位置。

第一点是好的,我开发的大多数应用程序都没有表达树的位置。为了处理第二点,你只需知道表达树是什么,它们如何工作以及它们能做什么/不能做什么。

当您需要具有遍历某些代码模型的能力时,通常会使用表达式树,例如,为了生成基于此代码模型的其他代码。如前所述,这种方法在Linq-to-SQL中使用。另一个不是开箱即用的示例可能是一个应用程序,您需要将对象的属性作为应用程序中的第一类公民对象,即您需要能够将该属性作为某个类的实例传递。使用反射可以完成同样的操作,但表达式树允许对这些代码进行较少的字符串输入。