【问题标题】:What are some instances in which expression trees are useful?表达式树在哪些情况下有用?
【发布时间】:2010-09-06 20:43:30
【问题描述】:

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

【问题讨论】:

    标签: c# expression


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      还是仅作为代码的传输机制有用?

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

      【讨论】:

        【解决方案3】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-23
          • 1970-01-01
          • 1970-01-01
          • 2021-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多