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

Sea*_*ers 11 c# expression

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

Fre*_*eth 7

一些单元测试模拟框架使用表达式树来建立强类型期望/验证.即:

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

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

myMock.Verify("SomeMethod", someObject) // we've lost the strong typing
Run Code Online (Sandbox Code Playgroud)


Kon*_*lph 6

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

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