我完全理解表达式树的概念,但是我很难找到它们有用的情况。是否有可以应用表达式树的特定实例?还是仅作为代码的传输机制有用?我觉得我在这里错过了一些东西。谢谢!
Sean Chambers
问问题
1461 次
3 回答
7
一些单元测试模拟框架利用表达式树来设置强类型期望/验证。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
于 2008-08-26T10:53:10.423 回答
6
还是仅作为代码的传输机制有用?
它作为代码的执行机制很有用。使用解释器模式,可以直接解释表达式树。这很有用,因为它实现起来非常容易和快速。这种解释器无处不在,甚至在似乎不“解释”任何东西的情况下也可以使用,例如用于打印嵌套结构。
于 2008-08-26T11:03:34.687 回答
4
当您需要访问函数逻辑以便以某种方式更改或重新应用它时,表达式树很有用。
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
于 2008-08-26T17:57:35.537 回答