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

本文关键字:内部 重叠 IF 简化 语句 | 更新日期: 2023-09-27 18:15:37

以下逻辑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;
    }

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

是的,您只关心外部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; 
}

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

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