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语句或变量的链接布尔上找到漂亮的符号时,我就会更新这篇文章;)