表达树有用的实例是什么?

我完全理解表达式树的概念,但我很难找到它们有用的情况。 是否有可以应用表达式树的特定实例? 或者它仅作为代码的传输机制有用? 我觉得我在这里错过了一些东西。 谢谢!

或者它仅作为代码的传输机制有用?

它作为代码的执行机制很有用。 使用解释器模式 ,可以直接解释表达式树。 这很有用,因为它实现起来非常简单快捷。 这样的解释器无处不在,甚至在似乎没有“解释”任何东西的情况下也被使用,例如用于打印嵌套结构。

一些unit testing模拟框架使用表达式树来建立强类型期望/validation。 即:

myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method // SomeMethod was called with // someObject as the argument 

这里,表达式从未实际执行过,但表达式本身保存了有趣的信息。 没有表达树的替代方案将是

 myMock.Verify("SomeMethod", someObject) // we've lost the strong typing 

当您需要访问函数逻辑以便以某种方式更改或重新应用它时,表达式树非常有用。

Linq to SQL就是一个很好的例子:

 //a linq to sql statement var recs ( from rec in LinqDataContext.Table where rec.IntField > 5 select rec ); 

如果我们没有表达式树,则此语句必须返回所有记录,然后将C#应用于每个记录。

使用表达式树, where rec.IntField > 5可以解析为SQL:

 --SQL statment executed select * from [table] where [table].[IntField] > 5