定义表达式树的最简洁方法?
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 制作一个非常垃圾的功能是不对的 - 在我看来。但是,它可能更具可读性......
考虑以下三行代码,它们是单元测试的一部分:
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 制作一个非常垃圾的功能是不对的 - 在我看来。但是,它可能更具可读性......