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

有帮助吗?

解决方案

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

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

其他提示

一些单元测试模拟框架利用表达式树来建立强类型的期望/验证。IE:

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 逻辑。

表达树 where rec.IntField > 5 可以解析成SQL:

--SQL statment executed
select *
from [table]
where [table].[IntField] > 5
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top