优化冗余其他语句

本文关键字:语句 其他 冗余 优化 | 更新日期: 2023-09-27 17:55:52

>我有这个代码块:

if (duplicateVoucherChecker(voucher))
{
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false);
    if (dialogResult == DialogResult.No)
    {
        ViewTyped.PaymentValueEditor.Focus();
    }
    else if (dialogResult == DialogResult.Yes)
    {
        Vouchers.Add(voucher);
        Payment.OriginalToPay = Payment.ToPay;
        ViewTyped.PaymentNumberEditor.Focus();
        ViewTyped.ChangeEditor.Focus();
    }
}
else
{
    Vouchers.Add(voucher);
    Payment.OriginalToPay = Payment.ToPay;
    ViewTyped.PaymentNumberEditor.Focus();
    ViewTyped.ChangeEditor.Focus();
}

我怎样才能使它不冗余?

我想摆脱第二个 else 语句,但如果 duplicateVoucherChecker(voucher) 返回 false,我仍然希望完成这个 else 块。

优化冗余其他语句

您可以使用bool来跟踪对话框是否未显示或结果为"是",并且仅在true时执行该逻辑。

bool dialogNotShownOrYesPicked = true;
if (duplicateVoucherChecker(voucher))
{
    DialogResult dialogResult = Messages.Question(
        "Podany bon był już użyty na tej stacji", "Uwaga",
        false);
    if (dialogResult == DialogResult.No)
    {
        ViewTyped.PaymentValueEditor.Focus();
    }
    if (dialogResult != DialogResult.Yes)
    {
        dialogNotShownOrYesPicked = false;
    }       
}
if(dialogNotShownOrYesPicked)
{
    Vouchers.Add(voucher);
    Payment.OriginalToPay = Payment.ToPay;
    ViewTyped.PaymentNumberEditor.Focus();
    ViewTyped.ChangeEditor.Focus();
}

嵌套if语句在概念上与简单地 AND 这些操作相同:

if (duplicateVoucherChecker(voucher) &&
    Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga",false) 
        == DialogResult.No)
{
    ViewTyped.PaymentValueEditor.Focus();
}
else
{
    Vouchers.Add(voucher);
    Payment.OriginalToPay = Payment.ToPay;
    ViewTyped.PaymentNumberEditor.Focus();
    ViewTyped.ChangeEditor.Focus();
}

请注意,这会在返回除 No 以外的任何值Messages.Question运行有问题的代码,而不仅仅是在返回 Yes 时。 如果Messages.Question可以返回 YesNo 以外的值,并且如果返回,则不应运行有问题的代码,那么您拥有的代码与您想要的代码一样好;充其量,您可以将重复的代码重构为方法。

您只需要存储dialogResult的状态,以防凭证重复。

var addVoucher = true;
if (duplicateVoucherChecker(voucher))
{
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false);
    addVoucher = (dialogResult == DialogResult.Yes);
    if (dialogResult == DialogResult.No)
    {
        ViewTyped.PaymentValueEditor.Focus();
    }
}
if (addVoucher)
{
    Vouchers.Add(voucher);
    Payment.OriginalToPay = Payment.ToPay;
    ViewTyped.PaymentNumberEditor.Focus();
    ViewTyped.ChangeEditor.Focus();
}

您可以使用有意义的变量来存储状态。如果您有重复的代码,这也表明您可以创建可重用的方法,例如 AddVoucher .

在这种情况下,您可以使用bool变量作为标志:

bool duplicateVoucher = duplicateVoucherChecker(voucher);
bool addVoucher = !duplicateVoucher;
if(!addVoucher)
{
    DialogResult dialogResult = Messages.Question("Podany bon był już użyty na tej stacji", "Uwaga", false);
    addVoucher = dialogResult == DialogResult.Yes;
    if (dialogResult == DialogResult.No)     
    {
        ViewTyped.PaymentValueEditor.Focus();
    }
}
if(addVoucher)
{
    Vouchers.Add(voucher);
    Payment.OriginalToPay = Payment.ToPay;
    ViewTyped.PaymentNumberEditor.Focus();
    ViewTyped.ChangeEditor.Focus();
}