简化IF语句逻辑 - 内部逻辑重叠

时间:2015-10-01 16:29:19

标签: c#

以下逻辑if条件是否可以简化? 我写了这段代码,但有些部分是重叠的,所以我想寻求一些帮助,看看它是否可以简化......

我实际上有三个不同的字段,但遵循相同的模式。

编辑:

    if (Row.ReceivableAmount_IsNull == true && Row.CustomerID == LastCustomerID)
    {
        if (LastReceivableAmount == null)
        {
            Row.PreviousReceivableAmount_IsNull = true;
        }
        else
        {
            Row.PreviousReceivableAmount = LastReceivableAmount.GetValueOrDefault();
        }
    }
    else
    {
        Row.PreviousReceivableAmount = LastReceivableAmount.GetValueOrDefault();
        LastReceivableAmount = Row.ReceivableAmount;
    }

    if (Row.SaleAmount_IsNull == true && Row.CustomerID == LastCustomerID)
    {
        if (LastSaleDate == null)
        {
            Row.PreviousSaleDate_IsNull = true;
        }
        else
        {
            Row.PreviousSaleDate = LastSaleDate.GetValueOrDefault();
        }
    }
    else
    {
        if (LastSaleDate == null)
        {
            Row.PreviousSaleDate_IsNull = true;
        }
        else
        {
            Row.PreviousSaleDate = LastSaleDate.GetValueOrDefault();
        }

        LastSaleDate = Row.Date;
    }

    if (Row.PaymentAmount_IsNull == true && Row.CustomerID == LastCustomerID)
    {
        if (LastPaymentDate == null)
        {
            Row.PreviousPaymentDate_IsNull = true;
        }
        else
        {
            Row.PreviousPaymentDate = LastPaymentDate.GetValueOrDefault();
        }
    }
    else
    {
        Row.PreviousPaymentDate = LastPaymentDate.GetValueOrDefault();
        LastPaymentDate = Row.Date;
    }

2 个答案:

答案 0 :(得分:1)

由于if的两个分支都相似,除了一个语句,您可以使用以下方法:

if (LastSaleDate == null)
{
    Row.PreviousSaleDate_IsNull = true;
}
else
{
    Row.PreviousSaleDate = LastSaleDate.GetValueOrDefault();
}

if (!Row.SaleAmount_IsNull || Row.CustomerID != LastCustomerID)
{
    LastSaleDate = Row.Date;
}

答案 1 :(得分:1)

是的,您只关心外部if条件中的LastSaleDate,因此请将其他内容移出。

一旦您将其移出,您可以将原始状态反转,将if / else减少为if。

if (LastReceivableAmount == null)
{
    Row.PreviousReceivableAmount_IsNull = true;
}
else
{
    Row.PreviousReceivableAmount = LastReceivableAmount.GetValueOrDefault();
}
if (!Row.ReceivableAmount_IsNull || Row.CustomerID != LastCustomerID)
{
    Row.PreviousReceivableAmount = LastReceivableAmount.GetValueOrDefault();
    LastReceivableAmount = Row.ReceivableAmount;
}


if (LastSaleDate == null)
{
    Row.PreviousSaleDate_IsNull = true;
}
else
{
    Row.PreviousSaleDate = LastSaleDate.GetValueOrDefault();
}
if (!Row.SaleAmount_IsNull || Row.CustomerID != LastCustomerID)
{
    LastSaleDate = Row.Date;
}   


if (LastPaymentDate == null)
{
    Row.PreviousPaymentDate_IsNull = true;
}
else
{
    Row.PreviousPaymentDate = LastPaymentDate.GetValueOrDefault();
}
if (!Row.PaymentAmount_IsNull == true || Row.CustomerID != LastCustomerID)
{
    Row.PreviousPaymentDate = LastPaymentDate.GetValueOrDefault();
    LastPaymentDate = Row.Date; 
}