定义表达式树的最简洁方法?

Cleanest way to define an expression tree?

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

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);        

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

好吧,我经常写 return 链式条件,例如:

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

或……

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

我想思路很清晰了。

但是,当 return 执行某些操作而不是在 if 语句中,或者像您正在做的那样时,这很不错。如果您永远不会再次使用该功能,那么只为 return 制作一个非常垃圾的功能是不对的 - 在我看来。但是,它可能更具可读性......