【问题标题】:Cleanest way to define an expression tree?定义表达式树的最简洁方法?
【发布时间】:2020-03-23 20:05:56
【问题描述】:

考虑以下三行代码,它们是单元测试的一部分:

var order = new NewOrderSingleTestMessages().ValidMessage;

Expression<Func<ExecutionReport, bool>> expectedReply = r => r.OrderID.Obj != string.Empty && 
                                                             r.ClOrdID.Obj == order.ClOrdID.Obj &&
                                                             r.ExecID.Obj != string.Empty &&
                                                             r.ExecType.Obj == ExecType.NEW &&
                                                             r.OrdStatus.Obj == OrdStatus.NEW;
                                                             // a lot more conditions are required here!

// ...

processorMock.Verify(m => m.Process(It.Is(expectedReply), It.IsAny<SessionID>()), Times.Once);        

丑!未来还会有更多的条件。我怎样才能以更干净、更清晰的方式重构它?

【问题讨论】:

    标签: c# lambda refactoring moq expression-trees


    【解决方案1】:

    嗯,我经常写返回的链式条件,例如:

    return a == b
        && c == d
        && !d
        && foo(e, f)
        ;
    

    或者……

    return a == b
        || c == d
        || (!d && foo(e,f))
        ;
    

    我想这个想法很清楚。

    但是,当返回某些东西时,这很漂亮,而不是在 if 语句中,或者就像你正在做的那样。如果您再也不会使用该函数,那么创建一个函数只是为了返回漂亮的垃圾是不对的——在我看来。但是,它可能更具可读性...

    【讨论】:

    • 感谢您的回复。我最终得到了一个返回表达式的私有静态方法......
    猜你喜欢
    • 2012-02-09
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2012-11-15
    • 2012-07-20
    相关资源
    最近更新 更多