C# 定义表达式树的最干净方法?

C# 定义表达式树的最干净方法?,c#,lambda,refactoring,moq,expression-trees,C#,Lambda,Refactoring,Moq,Expression Trees,考虑以下三行代码,它们是单元测试的一部分: var order = new NewOrderSingleTestMessages().ValidMessage; Expression<Func<ExecutionReport, bool>> expectedReply = r => r.OrderID.Obj != string.Empty &&

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

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);        
var order=NewOrderSingleTestMessages().ValidMessage;
表达式expectedReply=r=>r.OrderID.Obj!=string.Empty&&
r、 ClOrdID.Obj==order.ClOrdID.Obj&&
r、 ExecID.Obj!=字符串。空&&
r、 ExecType.Obj==ExecType.NEW&&
r、 OrdStatus.Obj==OrdStatus.NEW;
//这里需要更多的条件!
// ...
processorMock.Verify(m=>m.Process(It.Is(expectedReply),It.IsAny()),Times.one);

丑!此外,未来还会有更多的条件。如何以更干净、更清晰的方式重构它?

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

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

return a == b
    || c == d
    || (!d && foo(e,f))
    ;
我想这个想法很清楚


然而,当返回某些内容时,这很好,而不是在if语句中,或者像您正在做的那样。在我看来,如果你再也不会使用这个函数,那么仅仅为了返回一些垃圾而创建一个函数是不对的。不过,它可能更具可读性…

谢谢您的回复。我最终得到了一个私有静态方法,返回表达式…不客气!每当我在if语句或变量的链接布尔上找到漂亮的符号时,我就会更新这篇文章;)