重构if块

xdt*_*orm 1 c# refactoring conditional if-statement

在下面的代码中我有2个if块.
A,当对象为null时,第一个返回错误.
B,第二个将尝试发送对象,如果它失败则返回并出错.只有在不是A时才应该执行它,该对象不为null.

private bool SendToERP(Foo foo, out string error)
{
    error = "";
    var ticketIn = TicketFromFoo(foo, out string err);

    if(ticketIn == null)
    {
        error = err;
        return false;
    }

    if ( !GenericERP_TicketSubmit(ticketIn, out err))
    {
        error = err;
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

那些条件之后的动作是相同的,我想重构成一个独特的if块.

因为我不能扭曲我的头部状况,and我写了一个简单的真值表来帮助我.但它并没有帮助我变异.

Ant*_*e V 8

&&||运营商短路.它从左到右考虑.这意味着:

1)如果将&&其第一个操作数计算为false,则不会计算其第二个操作数.

2)如果将||其第一个操作数计算为true,则不会计算其第二个操作数.

在您的情况下,如果ticketIn为null,则不希望TicketSubmit执行.因此,您可以按2分组2个条件OR.像这样.

    var ticketIn = TicketFromFoo(foo, out string err);        
    if(ticketIn == null || !GenericERP_TicketSubmit(ticketIn, out err))
    {
         error = err;
         return false;
    }
    return true;
Run Code Online (Sandbox Code Playgroud)